使用Spin by Camunda处理命名空间

时间:2016-10-12 09:21:18

标签: java xml xpath namespaces camunda

我正在使用Spin,我的命名空间有问题。

我们说我有以下XML:

<root xmlns="test">
    <sub></sub>
</root>

如果我使用

将其读入SpinXmlElement
SpinXmlElement 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>

提前感谢您的帮助。

0 个答案:

没有答案