我正在使用Spin,我的命名空间有问题。
我们说我有以下XML:
<root xmlns="test">
<sub></sub>
</root>
如果我使用
将其读入SpinXmlElementSpinXmlElement root = Spin.XML("<root xmlns=\"test\"><sub></sub></root>");
<sub>
自动与<root>
相同的名称空间与“test”相同。
现在让我们添加一个新元素<sub2>
:
SpinXmlElement sub2 = Spin.XML("<sub2></sub2>");
root.append(sub2);
在xpath-test之后,您可以看到<sub2>
没有名称空间。
try {
root.xPath("./ns:sub2").ns("ns", "test").element();
} catch (final SpinXPathException ex) {
System.out.println("This will throw an error, because <sub2> has no namespace.");
}
重要:
如果您通过root
打印.toString()
,则会收到以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="test">
<sub/>
<sub2 xmlns=""/>
</root>
你可以看到<sub2>
这里有一个空名称空间。
现在让我们添加一个名为“sub3”的新元素。这次使用与<root>
相同的命名空间。
SpinXmlElement sub3 = Spin.XML("<sub3 xmlns=\"test\"></sub3>");
root.append(sub3);
如果进行xpath测试,您会看到<sub3>
现在与<root>
(“test”)位于同一名称空间中。
try {
root.xPath("./sub3").element();
} catch (final SpinXPathException ex) {
System.out.println("This will throw an error, because <sub3> has a namespace.");
}
重要:
但如果再次打印,您将获得以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="test">
<sub/>
<sub2 xmlns=""/>
<sub3 xmlns=""/>
</root>
因此,<sub2>
和<sub3>
在打印时会有一个空命名空间,但实际上<sub3>
有一个命名空间而<sub2>
没有。
最后我的问题是:
1.这种行为是一个错误还是我犯了错误?也许这是正确的行为,我误解了事情
2.使用Spin时是否可以忽略命名空间?
3.有没有办法在不添加打印形式的xmlns
属性的情况下向现有命名空间添加元素?
e.g。
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="test">
<!-- All <sub> elements in the namespace "test" -->
<sub/>
<sub2/>
<sub3/>
</root>
提前感谢您的帮助。