gpt4 book ai didi

java - 为什么没有明确指定命名空间的 XML 属性不会分配给默认命名空间

转载 作者:行者123 更新时间:2023-12-02 02:46:48 33 4
gpt4 key购买 nike

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

我希望 playerplayAttr 位于 http://www.example.com/default 命名空间中,而 coachcoachAttr 将位于 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 行。前 3 个对我来说很有意义。我不明白最后一行,其中 NS 为空。

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

关于java - 为什么没有明确指定命名空间的 XML 属性不会分配给默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44444944/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com