我正在尝试读取XML文件,例如:
<entry>
<title>FEED TITLE</title>
<id>5467sdad98787ad3149878sasda</id>
<tempi type="application/xml">
<conento xmlns="http://mydomainname.com/xsd/radiofeed.xsd" madeIn="USA" />
</tempi>
</entry>
下面是我目前拥有的代码:http://pastebin.com/huKP4KED
下面是我需要的,关于上面的XML:
- 我需要得到标题的值,id
- tempi的属性值以及contento的madeIn属性值
做这件事的最好方法是什么?
编辑
@Pascal Thivent
也许创建方法是个好主意,比如public String getValue(String xml,Element elementname),在这里指定标记名称,如果值不可用,则方法返回标记值或标记属性(可能给予名称作为附加方法参数
如果标签值不可用,我真的想获得某些标签值或属性,所以我正在思考什么是最好的方法,因为我以前从未这样做过。
3条答案
按热度按时间lbsnaicq1#
最好的解决方案是使用XPath。假设我们有以下
feed.xml
文件:下面是一个简短但可编译和运行的概念证明(
feed.xml
文件位于同一目录中)。这将生成以下输出:
请注意,使用XPath可以使值检索变得非常简单、直观、易读和直接,而且还可以很好地处理“丢失”的值。
API链接
package javax.xml.xpath
yhuiod9q2#
使用Element.getAttribute和Element.setAttribute
在您的示例中,
((Node) content.item(0)).getFirstChild().getAttributes()
。假设content
是一个输入错误,您指的是contento
,getFirstChild将正确返回NULL,因为contento没有子级。请尝试:((Node) contento.item(0)).getAttributes()
代替。另一个问题是,如果使用
getFirstChild
和getChildNodes()[0]
而不检查返回值,您可能会选择子文本节点,而不是您想要的元素。a2mppw5e3#
如前所述,
<contento>
没有任何子元素,因此:你应该把节点当作元素,并使用getAttribute(String),类似这样:
下面是你的代码的修改版本(它不是我写过的最健壮的代码):
在XML代码段上运行它会产生以下输出:
顺便问一下,你有没有考虑过用Rome之类的东西来代替?