2013-11-24 4 views
0

Я анализирующий документ XML с помощью XPath и у меня есть следующие данные:Как я могу использовать XPath для конкатенации элементов?

<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 

Is это вообще возможно? Я попытался

String workItemNodes = (String) (xpath.evaluate(workItemMembersXPath, source, XPathConstants.STRING)); 

где

String workItemMembersXPath ="concat(//dcterms:identifier, //dcterms:title)"; 

но это возвращает только первый результат. Я пытаюсь как-то поместить его в NodeList, но мне не очень повезло. Я все еще новичок в XPath.

Я нахожусь на правильном пути, возможно ли это, и есть ли лучшие/более простые способы обойти это?

ответ

0

Прежде всего: похоже, что вы работаете с форматом RDF, вы можете использовать jena вместо xpath. На самом деле я не слишком хорошо знаком с rdf/jena. RDF может быть выражен как XML, так что предположим, что вы можете использовать XPath.

Использование XPath Я бы предложил использовать /text() для получения текстового содержимого узла, это должно помочь вам преодолеть пустые строки в элементе title (выше и ниже фактического названия).

String workItemMembersXPath ="concat(//dcterms:identifier/text(), //dcterms:title/text())"; 
0

Извините, что не предоставил прямой ответ, но я считаю, что это важная информация.

Я настоятельно рекомендую вам не обрабатывать RDF/XML с помощью XPath. Мы пробовали это на работе, и это ужасная, склонная к ошибкам идея.

Основная проблема, с которой вы сталкиваетесь, заключается в том, что доступный 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 может работать с этим, если вы продолжаете использовать RDF, используя XPath, вы рано или поздно столкнетесь с проблемами, я могу вам это пообещать.

Смежные вопросы