我正在解析此XML文档:
<?xml version='1.0' encoding='UTF-8'?>
<team xmlns='http://www.example.com/default' xmlns:ns1='http://www.example.com/ns1'>
<ns1:coach ns1:coachAttr="ABC"/>
<player playerAttr="XYZ"/>
</team>
我希望
player
和playAttr
在http://www.example.com/default
命名空间中,而coach
和coachAttr
在http://www.example.com/ns1
命名空间中。结果
playerAttr
根本没有名称空间。这是代码:String xml="...";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));
Element team = doc.getDocumentElement();
Element player = (Element) team.getChildNodes().item(...);
Element coach = (Element) team.getChildNodes().item(...);
Attr playerAttr = (Attr) player.getAttributes().item(...);
Attr coachAttr = (Attr) coach.getAttributes().item(...);
System.out.println("coach: Name=" + coach.getLocalName() + " NS=" + coach.getNamespaceURI());
System.out.println("coachAttr: Name=" + coachAttr.getLocalName() + " NS=" + coachAttr.getNamespaceURI());
System.out.println("player: Name=" + player.getLocalName() + " NS=" + player.getNamespaceURI());
System.out.println("playerAttr: Name=" + playerAttr.getLocalName() + " NS=" + playerAttr.getNamespaceURI());
这将打印出4行。前三个对我有意义。我不明白最后一行,其中NS为null。
coach: Name=coach NS=http://www.example.com/ns1
coachAttr: Name=coachAttr NS=http://www.example.com/ns1
player: Name=player NS=http://www.example.com/default
playerAttr: Name=playerAttr NS=null
为什么
playerAttr
会有不同的对待?这是某种规格吗?项没有名称空间甚至意味着什么? 最佳答案
每个XML解析器的行为都像这样。既然您的问题是“为什么”,我想这对于大多数实际目的来说只是一种更简单的方法。
此处有更多详细信息:
https://stackoverflow.com/a/3313538/80911