xml - 如何使用 XSLT 在 XML 节点中添加和删除项目
问题描述
<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
<classes>
<class id="101"
<documents>
<document isWaived="true" name="Doc 1">true</document>
<document isWaived="false" name="Doc 2">false</document>
</documents>
</class>
</classes>
</partner>
在上面的 xml 中,我必须先删除文档节点中的所有项目,这样我才能得到以下输出。
<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
<classes>
<class id="101"
<documents>
</documents>
</class>
</classes>
</partner>
并想添加一组新文档以获得以下输出。
<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
<classes>
<class id="101"
<documents>
<document isWaived="false" name="Doc 3">false</document>
</documents>
</class>
</classes>
</partner>
我目前使用以下 xsl 来删除文档节点中的内容。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="document" />
但这给出了这样的输出
<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
<classes>
<class id="101"
<documents/>
</class>
</classes>
</partner>
现在,我必须将一些项目添加到节点数组中。我们应该怎么做。任何人都可以帮助删除节点的内容并添加新值。
解决方案
由于您希望输出是静态的,因此我只需更改文档模板,例如:
<xsl:template match="documents">
<xsl:copy>
<document isWaived="false" name="Doc 3">false</document>
</xsl:copy>
</xsl:template>
考虑到您的评论,您正在搜索 tokenize() 函数。
<xsl:for-each select="tokenize($documentstring,';')"> <!-- the second argument is the character you want to split the string on -->
<document isWaived="false" name="{.}">
<!-- The braces allow you to run codesegments inside the attribute -->
</document>
</xsl:for-each>
推荐阅读
- python - 在 python 中构建 MIDI 合并程序,带有恢复选项
- scala - 功能错误处理。执行所有处理程序
- libxml2 - 从哪里可以下载 64 位 libxml2.dll 和 mod_proxy_html.so 文件
- c++ - 通过基类对象访问派生类资源时出错
- makefile - makefile:第二个依赖项不执行
- php - 在执行另一个 mysqli 准备好的语句的 while 循环中执行 mysqli 准备好的语句
- javascript - 写信时改变输入按钮的颜色?
- c# - C# 二进制 CmdLet this.MyInvocation.PSScriptRoot 为空
- powershell - 如何使用 Powershell 将 AD 部门分成大小相等的组
- html - 如何将文本与列表中的边框中心对齐?