Tout,
J'ai plusieurs modèles XML que je dois remplir avec des données, pour permettre à ma classe de création de documents d'utiliser plusieurs modèles et d'insérer correctement les données
Je désigne le nœud auquel je veux que ma classe insère des données en ajoutant un attribut de:
id = "root"
Un exemple de XML
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<SiebelMessage MessageId="07f33fa0-2045-46fd-b88b-5634a3de9a0b" MessageType="Integration Object" IntObjectName="" IntObjectFormat="Siebel Hierarchical" ReturnCode="0" ErrorMessage="">
<listOfReadAudit >
<readAudit id="root">
<recordId mapping="Record ID"></recordId>
<userId mapping="User ID"></userId>
<customerId mapping="Customer ID"></customerId>
<lastUpd mapping="Last Updated"></lastUpd>
<lastUpdBy mapping="Last Updated By"></lastUpdBy>
<busComp mapping="Entity Name"></busComp>
</readAudit>
</listOfReadAudit>
</SiebelMessage>
Code
expr = xpath.compile("//SiebelMessage[@id='root']");
root = (Element) expr.evaluate(xmlDoc, XPathConstants.NODE);
Element temp = (Element) root.cloneNode(true);
En utilisant cet exemple: XPath pour sélectionner l'élément par valeur d'attribut
L'expression ne fonctionne pas:
// SiebelMessage [@ id = 'root']
Des idées sur ce que je fais mal?
Essaye ça:
//readAudit[@id='root']
Cela sélectionne tous les éléments readAudit
avec l'attribut id
défini sur root
(il ne doit s'agir que d'un élément dans votre cas).
Vous pouvez vous assurer qu'il renvoie au maximum 1 élément avec ceci:
//readAudit[@id='root'][1]
Ce que vous faites est de sélectionner des nœuds SiebelMessage avec l'attribut id = 'root'.
Mais le SiebelMessage n'a pas d'identifiant, c'est le readAudit que vous recherchez. Alors soit
//readAudit[id='root']
ou
//SiebelMessage//readAudit[id='root']