XPath 표현식을 사용하여 JDOM 문서에서 일부 요소를 추출하는 데 매우 어려움을 겪고 있습니다. 다음은 샘플 XML 문서입니다. ItemCost 요소를 모두 문서에서 제거하고 싶습니다만, 지금은 평가할 XPath 표현식을 얻는 데 문제가 있습니다.JDOM, XPath 및 네임 스페이스 상호 작용
<srv:getPricebookByCompanyResponse xmlns:srv="http://ess.com/ws/srv">
<srv:Pricebook>
<srv:PricebookName>Demo Operator Pricebook</srv:PricebookName>
<srv:PricebookItems>
<srv:PricebookItem>
<srv:ItemName>Demo Wifi</srv:ItemName>
<srv:ProductCode>DemoWifi</srv:ProductCode>
<srv:ItemPrice>15</srv:ItemPrice>
<srv:ItemCost>10</srv:ItemCost>
</srv:PricebookItem>
<srv:PricebookItem>
<srv:ItemName>1Mb DIA</srv:ItemName>
<srv:ProductCode>Demo1MbDIA</srv:ProductCode>
<srv:ItemPrice>20</srv:ItemPrice>
<srv:ItemCost>15</srv:ItemCost>
</srv:PricebookItem>
</srv:PricebookItems>
</srv:Pricebook>
</srv:getPricebookByCompanyResponse>
나는 일반적으로 단지 등 // SRV 같은 표현을 사용합니다 : ItemCost 다른 문서에 잘 작동 이러한 요소를 식별하는, 그러나 여기 지속적으로 목록에 0 노드를 반환합니다. 여기에 내가 사용하고 코드입니다 :
응답 (AN XMLOutputter를 확인) 위의 XML 조각을 포함하는 JDOM 요소입니다Namespace ns = Namespace.getNamespace("srv","http://ess.com/ws/srv");
XPath filterXpression = XPath.newInstance("//ItemCost");
filterXpression.addNamespace(ns);
List nodes = filterXpression.selectNodes(response);
. 노드는이 문서를 파싱 할 때마다 size() == 0을 계속 갖습니다. 같은 문서에서 Eclipse의 XPath 파서를 사용하면이 표현식이 작동하지 않습니다. 파고 들자마자, 다음 식으로 작업 할 Eclipse 평가자를 얻었습니다. // * [local-name() = 'ItemCost'], Java 코드의 // srv : ItemCost를이 값으로 대체해도 결과가 생성되지 않았습니다. XML에서 네임 스페이스 선언을 제거하면 // srv : ItemCost가 Eclipse 파서에서 올바르게 해결되지만 XML에서 XML을 제거 할 수 없다는 것을 알아 차렸다. 나는 지금이 순간에 우리 머리를 긁어 왔고, 올바른 방향으로 조금 움직여 주셔서 감사합니다.
많은 감사
편집 : 고정 코드 -
Document build = new Document(response);
XPath filterXpression = XPath.newInstance("//srv:ItemCost");
List nodes = filterXpression.selectNodes(build);
죄송합니다. @ 브린, C#에서이 작업을 수행하는 방법을 알고 있지만 JDOM에 대한 경험이 없습니다. (따라서 답변을 삭제했습니다. –