我用XPath分析XML文档,我有以下数据:
<rdf:Description rdf:about="https://<server>/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/57108">
<rdf:type rdf:resource="http://open-services.net/ns/cm#ChangeRequest"/>
<dcterms:type rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Defect</dcterms:type>
<dcterms:identifier rdf:datatype="http://www.w3.org/2001/XMLSchema#string">57108</dcterms:identifier>
<dcterms:title rdf:parseType="Literal">
The page does not scroll, Save Button not clickable
</dcterms:title>
</rdf:Description>
<rdf:Description rdf:about="https://<server>/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/56645">
<rdf:type rdf:resource="http://open-services.net/ns/cm#ChangeRequest"/>
<dcterms:type rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Defect</dcterms:type>
<dcterms:identifier rdf:datatype="http://www.w3.org/2001/XMLSchema#string">56645</dcterms:identifier>
<dcterms:title rdf:parseType="Literal">
NewMobApp Android: behavior of the swipe is incorrect
</dcterms:title>
</rdf:Description>
我要做的是格式化数据,以便得到以下输出:
57108 - The page does not scroll, Save Button not clickable
56645 - NewMobApp Android: behavior of the swipe is incorrect
这一切都可能吗?我试过了
String workItemNodes = (String) (xpath.evaluate(workItemMembersXPath, source, XPathConstants.STRING));
,其中
String workItemMembersXPath ="concat(//dcterms:identifier, //dcterms:title)";
但它只返回第一个结果。我试图以某种方式把它放入NodeList,但我没有太多运气。我还是XPath的新手。
我是否走在正确的轨道上,这是否可行,是否有更好/更容易的方法?
答案 0 :(得分:0)
首先:看起来您使用的是RDF格式,您可能需要考虑使用jena而不是xpath。其实我对rdf / jena不太熟悉。 RDF可以表示为XML,因此可以假设您可以使用XPath。
使用XPath我建议使用/text()
来获取节点的文本内容,这可以帮助您克服title
元素中的空行(实际标题的上方和下方)。
String workItemMembersXPath ="concat(//dcterms:identifier/text(), //dcterms:title/text())";
答案 1 :(得分:0)
很抱歉没有直接回答,但我觉得这是重要的信息。
我建议您不要使用XPath处理RDF / XML。我们在工作中尝试过,这是一个可怕的,容易出错的想法。
您遇到的主要问题是您将访问的XML不是静态的。我不只是表示语句的数量,而是表示这些语句在RDF / XML中的表示。无论您使用什么来在RDF / XML中序列化图形,我都非常确定,不能保证每次都输出相同的输出。那就应该告诉你放弃使用XPath的想法。
例如,像这样表达图形是完全有效的:
<rdf:Description rdf:about="https://<server>/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/56645">
<rdf:type rdf:resource="http://open-services.net/ns/cm#ChangeRequest"/>
</rdf:Description>
<rdf:Description rdf:about="https://<server>/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/56645">
<dcterms:type rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Defect</dcterms:type>
</rdf:Description>
<rdf:Description rdf:about="https://<server>/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/56645">
<dcterms:identifier rdf:datatype="http://www.w3.org/2001/XMLSchema#string">56645</dcterms:identifier>
</rdf:Description>
<rdf:Description rdf:about="https://<server>/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/56645">
<dcterms:title rdf:parseType="Literal">
NewMobApp Android: behavior of the swipe is incorrect
</dcterms:title>
</rdf:Description>
这与上面的子图相同,只是略有不同。虽然一个XPath表达式可能适用于此,但如果您继续使用XPath利用RDF,您迟早会遇到问题,我可以向您保证。