xml - 使用 Groovy+Smooks 向现有 XML 添加命名空间声明

标签 xml groovy namespaces declaration

我正在编写这个在 Smooks 中运行并编辑 XML 的 groovy 脚本。我正在尝试将 xsi:nil="true"添加到空字段中,但我遇到的问题是 xsi 命名空间声明未添加到根字段中。这是我尝试过的:

element['@xsi:nil'] = 'true'


def nil = doc.createAttributeNS("http://www.w3.org/2001/XMLSchema-instance", 'xsi:nil')
nil.setValue('true');
element.setAttributeNodeNS(nil)

这两个都将添加属性但不添加 NS 声明。

我也试过这个,但它导致堆栈溢出错误:
def doc = element.getOwnerDocument();
doc.declareNamespace(xsi: 'http://www.example.org/xsi')

这是 Smooks 文档的链接:
http://www.smooks.org/mediawiki/index.php?title=V1.4:groovy

基本上,脚本在运行时生成的 groovy 类中运行。

最佳答案

尝试格式化元素,如下所示:

 "elementname"('xsi:nil' : 'true', 'xmlns:xsi' : 'http://www.w3.org/2001/XMLSchema-instance')

这将返回以下 XML 标记:
<elementname xsi:nil='true' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />

希望这能解决您的问题。

关于xml - 使用 Groovy+Smooks 向现有 XML 添加命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5089226/

相关文章:

Python XML 解析、lxml、urllib.request

java - 在 REST 和 hibernate 中检索详细信息时出现 406 错误

groovy - Groovy歧义方法重载

visual-studio - 在 Visual Studio 调试器中查看命名空间全局变量?

C++ "using tcp=x"到 "namespace tcp=x"有什么区别

vb.net - 无法使用 VS 2019 在 VB.Net 项目中创建新的命名空间

xml - 使用 config.xml 重写 url

java - VTD XML (Java) VTDNavHuge 将 XPath 结果写入文件

exception - Groovy Gorm在save()上捕获util.JDBCExceptionReporter错误

google-maps - Grails-从lat,lang找到位置