【问题标题】:how to get the child node value on attribute stax Java如何在属性stax Java上获取子节点值
【发布时间】:2014-03-29 01:59:05
【问题描述】:

我需要 STAX java 中的指导 我有 xml 文件,我需要在满足之前的父节点 book id 属性值之前获取内部元素值。例如。

<books>
<book id = "1">
   <chap num ="1"> This First Title </chap>
   <chap num ="2"> This second of first book </chap>
</book>
<book id = "2">
   <chap num ="1"> This First Title of second book </chap>
   <chap num = "2"> This Second of second book </chap>
</book>
</books>

我需要基于比较书籍属性 id 的“chap”元素的属性值。

只是提示会指导我。

【问题讨论】:

    标签: java xml parsing stax


    【解决方案1】:

    你需要按照这些思路做一些事情

    String xmlString = ...
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(xmlString);
    
    XPathFactory xPathfactory = XPathFactory.newInstance();
    XPath xpath = xPathfactory.newXPath();
    String xpathExp = "/books/book[@id=\"2\"]";
    Node node = (Node) xpath.evaluate(xpathExp, doc, XPathConstants.NODE);
    

    从“book”节点,您可以遍历子节点(“chap”节点)。或者您可以通过以下方式直接访问子节点列表:

    String xpathExp = "/books/book[@id=\"2\"]/chap";
    NodeList chapNodeList = (NodeList) xpath.evaluate(xpathExp, doc, XPathConstants.NODESET);
    

    然后您可以从“chap”节点检索属性值。 (例如,node.getTextContent();

    或者如果你知道你想要哪一章,修改xpath表达式更具体。

    【讨论】:

    • 感谢您的回复。但是上面关于内存性能的另一个问题是示例 DOM 解析器,stax 更有效。哪个更适合用作解析器 stax 或 DOM。
    • 抱歉,我回复太晚了,没有收到 STAX 参考。这取决于您的环境限制。如果您有大型 XML 文档和/或少量内存(嵌入式/移动),则可以使用 STAX。
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多