<list>
<com.domain.Products>
<cla__id>
<cname>class1</cname>
<id>1</id>
</cla__id>
<name>pname1</name>
<id>1</id>
</com.domain.Products>
<com.domain.Products>
<cla__id reference="../../com.domain.Products/cla__id"/>
<name>pname2</name>
<id>2</id>
</com.domain.Products>
</list>
我想使用xpath获取cname节点的值(值为'class1'),而对于第二个com.domain.Products节点,它只是对cla__id节点的引用,这正好是与第一个com.domain.Products节点...
相同因此,第二个com.domain.Products节点的cname实际上与第一个com.domain.Products节点相同,都是'class1',但如果我使用cla__id / cname xpath来获取值,我可以只有第一个com.domain.Products节点正确获取它,第二个com.domain.Products节点才会有空值,这是错误的。
如何获得正确的结果?非常感谢。
......
private ProductsDS(String id) {
String recordName = "com.domain.Products";
setID(id);
setDataFormat(DSDataFormat.XML);
setRecordXPath("//" + recordName);
DataSourceField pkField = new DataSourceField("id", FieldType.INTEGER, "id");
pkField.setHidden(true);
pkField.setPrimaryKey(true);
DataSourceField claIdField = new DataSourceField("cla__id/cname", FieldType.TEXT, "classtype");
claIdField.setValueXPath("cla__id/cname");
......
ps:只需重新编辑两次以使帖子更好......
答案 0 :(得分:1)
在XPath 1.0和XPath 2.0中无法执行动态(不包含在XPath表达式中,但已生成)XPath表达式。
因此,无法动态评估对嵌入另一个XML元素的元素的引用,其中引用是XPath表达式。
建议的解决方案:提供一种唯一标识元素的新方法(例如为其提供唯一的id属性),并使用此属性的值作为元素的引用:
<list>
<com.domain.Products>
<cla__id>
<cname>class1</cname>
<id>1</id>
</cla__id>
<name>pname1</name>
<id>1</id>
</com.domain.Products>
<com.domain.Products>
<cla__id reference="1"/>
<name>pname2</name>
<id>2</id>
</com.domain.Products>
</list>
然后,具有cname
com.domain.Products
的{{1}}元素的id
值为:
2