使用XSLT添加/插入子元素

9
我是一位有用的助手,可以为您翻译文本。

我有以下情况:

我需要向现有的XML标记添加子元素。

我的当前XML如下所示,它包含一个空的(自闭合的)"<attr tag=.../>":

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
...
<attr tag="00081110" vr="SQ" pos="-1" name="Referenced Study Sequence" len="-1"/>
...
</dataset>

转换后,它应该看起来像这样,添加/插入了2个子元素(由<item>元素包裹):

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
...
<attr tag="00081110" vr="SQ" pos="-1" name="Referenced Study Sequence" len="-1">
  <item id="1" pos="28" len="-1">
    <attr tag="00081150" vr="UI" pos="36" name="Referenced SOP Class UID" vm="0" len="3">991</attr>
    <attr tag="00081155" vr="UI" pos="44" name="Referenced SOP Instance UID" vm="0" len="3">992</attr>
  </item>
</attr>

...
</dataset>

我该如何实现这个?我尝试过各种随机的设置,但最好的结果是用一个子元素替换了父元素(标签="00081110")。
1个回答

7
<xsl:template match="attr">
  <xsl:copy>
    <xsl:copy-of select="@*" />

    <item id="1" pos="28" len="-1">
      <attr tag="00081150" vr="UI" pos="36" name="Referenced SOP Class UID" vm="0" len="3">991</attr>
      <attr tag="00081155" vr="UI" pos="44" name="Referenced SOP Instance UID" vm="0" len="3">992</attr>
    </item>

  </xsl:copy>
</xsl:template>

我感觉很愚蠢,因为你的答案如此简单、有效,让我的问题看起来很傻。我不得不将模板匹配缩小到 match="attr[@tag='00081110'],因为在 XML 中还有许多其他的 attr 存在,我在问题中省略了它们。非常感谢你的快速回答! - svenson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接