所有
我需要填充数据的多个XML模板,以允许我的文档构建器类使用多个模板并正确插入数据
我通过添加以下属性来指定我希望我的类插入数据的节点:
ID ="根"
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>
代码
expr = xpath.compile("//SiebelMessage[@id='root']");
root = (Element) expr.evaluate(xmlDoc, XPathConstants.NODE);
Element temp = (Element) root.cloneNode(true);
使用此示例: XPath to select Element by attribute value
表达式不起作用:
// SiebelMessage [@id =&#39;根&#39;]
任何想法我做错了什么?
答案 0 :(得分:25)
试试这个:
//readAudit[@id='root']
这会选择readAudit
属性设置为id
的所有root
元素(在您的情况下,它应该只有1个元素)。
您可以确保它返回最多1个元素:
//readAudit[@id='root'][1]
答案 1 :(得分:2)
您正在做的是选择属性为id =&#39; root&#39;的SiebelMessage节点。
但SiebelMessage没有id,它是你所追求的readAudit。所以要么
//readAudit[id='root']
或
//SiebelMessage//readAudit[id='root']