【问题标题】:How to get XML content as a String如何以字符串形式获取 XML 内容
【发布时间】:2014-04-19 10:06:51
【问题描述】:
<root>
<h id="1">
    <d value="1,2,3,4,5"><open>10:00</open><close>23:00</close></d>
    <d value="6"><open>10:00</open><close>2:00</close></d>
    <d value="7"><open>10:00</open><close>21:00</close></d>
</h>
<h id="2">
</h>
</root>

这里我有根有&lt;h&gt; 标记节点列表的XML。现在我需要将它们分成几部分并将其设置为不同的变量(添加到地图中)。

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(new ByteArrayInputStream(data.getBytes("utf-8"))));
NodeList nList = doc.getElementsByTagName("h");
for (int i = 0; i < nList.getLength(); i++)
{
    Node nNode = nList.item(i);
    System.out.println(nNode.getAttributes().getNamedItem("id") + " " + ?????);        
}

我应该调用什么来获取nNode 的值(字符串值)?

一旦有人填写了 ????

1 <h id="1"><d value="1,2,3,4,5"><open>10:00</open><close>23:00</close></d><d value="6">open>10:00</open><close>2:00</close></d><d value="7"><open>10:00</open><close>21:00</close></d></h>
2 <h id="2"></h>

我不介意将其作为根元素

【问题讨论】:

  • 我最近回答了another question,关于使用 XPath 获得Strings 的 XML 子树 - 这可能也是这里最好的方法。

标签: java xml dom


【解决方案1】:

如果您使用来自javax.xml.soap.Node 的Node,您是否尝试过nNode.toString()

【讨论】:

  • 我正在使用 import org.w3c.dom.*;
【解决方案2】:

您尝试过 jDom 库吗? http://www.jdom.org/docs/apidocs/org/jdom2/output/XMLOutputter.html

 XMLOutputter outp = new XMLOutputter();
 String s = outp.outputString(your_jdom_element);

【讨论】:

    【解决方案3】:

    您可以使用Node.getTextContent() 方便地获取节点的所有文本(也可以获取子节点的文本)。

    有关简短示例,请参阅 Parsing xml file contents without knowing xml file structure


    如果您尝试获取 d 节点的 value 属性(我实际上无法判断,您的问题对我来说有点不清楚),那么情况会有所不同——因为您会迭代通过每个h 节点的子节点(使用getChildNodes()getFirstChild() + getNextSibling())然后获取它们的value 属性,就像您获取h 节点的id 属性一样(上面的链接还显示了遍历子节点的示例)。

    【讨论】:

    • @dinesh707 在这种情况下; stackoverflow.com/questions/1219596/… 有什么帮助吗? Anver这里的回答也是一个不错的选择。
    • Node.getTextContent() 的问题是它只给我文本。我什至需要主节点下的 XML 标签
    • @dinesh707 是的,这是正确的;在您更新之前还不清楚。检查我以前内容中的链接,并按照 Anver 的回答中所述考虑 jDom。
    • 我 UP 投票的评论起到了作用。谢谢。但我希望有一种更简单直接的方法。好像没有别的办法了。
    【解决方案4】:

    你可以使用它:

    http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#getTextContent()

    但您的示例 nNode 有其他节点,而不仅仅是文本。看来您需要辅助方法来从子节点构造字符串。

    将你的 nNode 传递给nodeToString

    XML Node to String in Java

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多