JAVA中的DOM解析器查询
提前感谢您的帮助…如下所示修复您的XPath表达式:JAVA中的DOM解析器查询,java,xml,dom,xpath,Java,Xml,Dom,Xpath,提前感谢您的帮助…如下所示修复您的XPath表达式: /testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text 例如,您可以使用 Node.getTextContent(); 更新:在我发布上述XPath时,它似乎是正确的。同时,您已经完全更改了XML代码,现在XPath将读取 /testCodeIdentifier/subjectOf/code/subjectOf/annotation[code/@cod
/testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text
例如,您可以使用
Node.getTextContent();
更新:在我发布上述XPath时,它似乎是正确的。同时,您已经完全更改了XML代码,现在XPath将读取
/testCodeIdentifier/subjectOf/code/subjectOf/annotation[code/@code='SPECIALNOTE']/text
或者,因为我猜这个问题是如此的混乱,它仍然是错误的,只要做:
//注释[code/@code='SPECIALNOTE']/text
像这样修复XPath表达式:
/testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text
例如,您可以使用
Node.getTextContent();
更新:在我发布上述XPath时,它似乎是正确的。同时,您已经完全更改了XML代码,现在XPath将读取
/testCodeIdentifier/subjectOf/code/subjectOf/annotation[code/@code='SPECIALNOTE']/text
或者,因为我猜这个问题是如此的混乱,它仍然是错误的,只要做:
//注释[code/@code='SPECIALNOTE']/text
首先,您的XPath表达式有一个错误<代码>主题f被不必要地重复:
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("xml.xml");
XPath xpath = XPathFactory.newInstance().newXPath(); // XPath Query for showing all nodes value
XPathExpression expr = xpath.compile("/testCodeIdentifier/subjectOf/subjectOf/annotation/code[@code='SPECIALNOTE']");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("........"+nodes.item(i).getNodeValue()+"........");
}
}
}
现在,假设您确实需要对targettext
元素前面的code
节点的引用,那么使用以下方法:
/subjectOf/subjectOf
其中getNextElementSibling
定义如下:
XPathExpression expr = xpath.compile(
"/testCodeIdentifier/subjectOf/annotation/code[@code='SPECIALNOTE']");
Node node = (Node) expr.evaluate(doc, XPathConstants.NODE);
System.out.println(getNextElementSibling(node).getTextContent());
关于这一点,有几点需要注意:
最初不适用于您的原因(很可能)是因为引用的getNextSibling
元素的下一个同级是文本节点,而不是元素节点。(code
和code
之间的空格很重要。)这就是为什么我们需要text
getNextElementSibling
- 我们选择的是单个节点,因此如果
XPathConstants.NODELIST
XPathExpression expr = xpath.compile(
"/testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text/text()");
String text = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println(text);
首先,XPath表达式有一个错误<代码>主题f被不必要地重复:
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("xml.xml");
XPath xpath = XPathFactory.newInstance().newXPath(); // XPath Query for showing all nodes value
XPathExpression expr = xpath.compile("/testCodeIdentifier/subjectOf/subjectOf/annotation/code[@code='SPECIALNOTE']");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("........"+nodes.item(i).getNodeValue()+"........");
}
}
}
现在,假设您确实需要对targettext
元素前面的code
节点的引用,那么使用以下方法:
/subjectOf/subjectOf
其中getNextElementSibling
定义如下:
XPathExpression expr = xpath.compile(
"/testCodeIdentifier/subjectOf/annotation/code[@code='SPECIALNOTE']");
Node node = (Node) expr.evaluate(doc, XPathConstants.NODE);
System.out.println(getNextElementSibling(node).getTextContent());
关于这一点,有几点需要注意:
最初不适用于您的原因(很可能)是因为引用的getNextSibling
元素的下一个同级是文本节点,而不是元素节点。(code
和code
之间的空格很重要。)这就是为什么我们需要text
getNextElementSibling
- 我们选择的是单个节点,因此如果
XPathConstants.NODELIST
XPathExpression expr = xpath.compile(
"/testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text/text()");
String text = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println(text);
终于我自己找到了问题的答案。。。。下面的代码正在用于解析我的XML
XPathExpression expr = xpath.compile(
"/testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text");
Node text = (Node) expr.evaluate(doc, XPathConstants.NODE);
System.out.println(text.getTextContent());
XPath=XPathFactory.newInstance().newXPath();
//用于显示所有节点值的XPath查询
XPathExpression expr=xpath.compile(“//testCodeIdentifier/subjectOf/order/subjectOf/annotation/code[@code='SPECIALNOTE']]/以下同级::text/text()”;
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
对于(int i=0;i
谢谢大家在这篇文章中回答,但这是一个可能的解决方案。在上面打个记号。我终于自己找到了问题的答案。。。。下面的代码正在用于解析我的XML
XPathExpression expr = xpath.compile(
"/testCodeIdentifier/subjectOf/annotation[code/@code='SPECIALNOTE']/text");
Node text = (Node) expr.evaluate(doc, XPathConstants.NODE);
System.out.println(text.getTextContent());
XPath=XPathFactory.newInstance().newXPath();
//用于显示所有节点值的XPath查询
XPathExpression expr=xpath.compile(“//testCodeIdentifier/subjectOf/order/subjectOf/annotation/code[@code='SPECIALNOTE']]/以下同级::text/text()”;
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
对于(int i=0;i
谢谢大家在这篇文章中回答,但这是一个可能的解决方案。请记住。@GOK:对不起,我误解了你的问题。我会修正我的答案谢谢你理解我的查询,vry less ppl到达那个pt…:)for(inti=0;I
标签我们需要获得标签信息。。。我可以使用访问下一个标记的语法吗..我知道nextsibling(),但它没有帮助..“its not do it”不是一个有用的语句。您可以编辑您的问题,以准确显示您正在使用的输入、您尝试的代码、您收到的输出以及您期望的输出。这就是一个好问题的写法。@lwburk我已经更新了确切的代码副本,让你明白我需要什么