java中的XML解析
可能重复:java中的XML解析,java,xml,Java,Xml,可能重复: 大家好 我是java初学者。我希望我问的问题可能很简单。我的问题是,如果我有一个XML文件,并且我想解析它,那么只需要使用in-specific标记获取元素。 例如,如果XML文件看起来像 <date>2005-10-31</date> <number>12345</number> <purchased-by> <name>My name</name> <address>
大家好 我是java初学者。我希望我问的问题可能很简单。我的问题是,如果我有一个XML文件,并且我想解析它,那么只需要使用in-specific标记获取元素。 例如,如果XML文件看起来像
<date>2005-10-31</date>
<number>12345</number>
<purchased-by>
<name>My name</name>
<address>My address</address>
</purchased-by>
<order-items>
<item>
<code>687</code>
<type>CD</type>
<label>Some music</label>
</item>
<item>
<code>129851</code>
<type>DVD</type>
<label>Some video</label>
</item>
</order-items>
从这个XML中,我只想解析标记名order items中包含的元素
有什么通用的方法可以做到这一点吗?请让我知道。。
谢谢这是SAX的经典案例。注册接收标记并忽略除订单项以外的所有标记的处理程序
也许更好的方法是使用Apache Digester,但对于您的特定任务来说,它已经太过死板了。正如评论中所说,一个简短的谷歌搜索应该会让您达到目标。基本上,Java中有两种主要的XML解析方法:
- ,在这里,您可以使用一个
- ,它一直解析您的文件,并允许您以更像树的方式获取所有元素
因此,根据您想要实现的目标,您可以使用以下方法之一。使用XPath。它允许您根据节点名称选择节点并加载其他条件。设置所涉及的代码很少
您可以使用DOM解析器来构建一个XML,然后使用
getElementsByTagName
方法提取所需的任何元素
以下是一些帮助您入门的示例代码:
//parse file and build Document
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("file.xml"));
//get list of elements called order-items
NodeList orderItemsNodes = doc.getElementsByTagName("order-items");
//iterate over the elements
for(int i = 0 ; i <orderItemsNodes.getLength();i++ ){
Node orderItemNode = orderItemsNodes.item(i);
}
//解析文件和生成文档
Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(新文件(“File.xml”);
//获取名为order items的元素列表
NodeList orderItemsNodes=doc.getElementsByTagName(“订单项”);
//迭代元素
对于(int i=0;i如果要将解析操作本身限制为
元素,则必须使用SAX。SAX解析器访问输入“文件”(或流)的所有元素您可以定义,解析器将忽略任何不是
或其子元素的内容。结果将是一个仅包含这些元素的文档
如果xml文档非常小,并且性能不是限制因素,那么只需解析整个文档(这是一个2行程序)使用XPath表达式来选择正确的节点。它实际上取决于你打算如何使用项目数据。如果你想把它解析成对象然后使用它,我会使用JAXB编组,但是如果你只想从每个项目元素的代码、类型和标签属性中剥离字符串值,你可以考虑使用。xml字符串上的简单正则表达式匹配-匹配每个项目标记的内容,然后匹配每个属性并提取其值。
如果您阅读了如何在Java中解析xml,尝试自己解决它,并在遇到问题时在此处发布一个问题(带有代码示例)。谷歌搜索.Agree@Marcelo Cantos这个问题在SO中也被问了很多次,所以你可以在这里搜索。这些人不是谷歌吗?我已经回答过很多类似的问题了。XPath
要求你已经解析过(部分)文档。如果OP的措辞正确,他希望将解析操作限制在
。因此,在这种情况下,xpath不会有帮助。@Andreas\u D-我猜他的意思是他不关心其他元素,希望尽可能少的麻烦到达他感兴趣的元素。如果这是一个性能问题,您是对的。javax、 xml.xpath库不要求输入是DOM节点。当然,文档需要处理(与任何方法一样),但xpath实现不需要效率低下。StAX是xml解析的另一种标准方法。它与SAX类似,只是需要请求(拉)事件。Java SE 6中包含一个StAX游行。@Blaise:添加了一个关于StAXvtd xml的部分是另一个