我正在解析此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>


我希望playerplayAttrhttp://www.example.com/default命名空间中,而coachcoachAttrhttp://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

09-30 17:24
查看更多