繁体   English   中英

使用 XSL 文件向根元素添加属性

Adding an attribute to a root element using an XSL file

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在努力做一些看起来很简单的事情。 我想使用 XSL 转换为 XML 文件上的特定类型的所有元素添加一个属性。

这是我的来源 XML:

<?xml version="1.0" encoding="UTF-8"?>
<row>
  <Item_1>110000001</Item_1>
  <Item_2>700555608</Item_2>
  <Item_3>1</Item_3>
  <Item_4>2005-12-07</Item_4>
  <age_passage_a>21</age_passage_a>
  <age_passage_m>217</age_passage_m>
  <age_passage_j>6669</age_passage_j>    
  <date_entree>2022-08-08 01:25:00</date_entree>
  <date_naissance>2003-12-07</date_naissance>
</row>

源文件可能带有多个row元素。 在这种情况下,它们被<root>元素包围。

我的 XSL 文件如下,并使用此逻辑:

  1. 复制所有元素

  2. 仅修改row元素(如果它们还没有属性)并添加属性。

     <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0" /> <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="row[not(@*)]"> <xsl:attribute name="tableName"> <xsl:value-of select="passage"/> </xsl:attribute> </xsl:template> </xsl:stylesheet>

预期的 XML output 应该是:

<row tableName="passage">
  <Item_1>110000001</Item_1>
  <Item_2>700555608</Item_2>
  <Item_3>1</Item_3>
  ...
</row>
<row tableName="passage">
  <Item_1>110000001</Item_1>
  <Item_2>700555608</Item_2>
  <Item_3>1</Item_3>
  ...
</row>

我有一些错误说不可能将属性添加到文档级元素。 我不明白,因为 XML 顶部的不同元素具有属性...

提前感谢您对这个小问题的帮助!


编辑:我在下面添加解决方案。 马丁回答的关键是复制并应用模板。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0" />

 <xsl:param name="TABLE_NAME">passage</xsl:param>

 <xsl:template match="node() | @*">
     <xsl:copy>
       <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

 <xsl:template match="row[not(@*)]">
   <xsl:copy>
     <xsl:attribute name="tableName">
       <xsl:value-of select="$TABLE_NAME"/>
     </xsl:attribute>
     <xsl:apply-templates/>
   </xsl:copy>
 </xsl:template>

 </xsl:stylesheet>

问候, 埃里亚托克

1 个回复

做一个浅拷贝,添加属性并处理孩子:

 <xsl:template match="row[not(@*)]">
   <xsl:copy>
      <xsl:attribute name="tableName">passage</xsl:attribute>
      <xsl:apply-templates/>
   </xsl:copy>
 </xsl:template>

这也改变了构造属性值的方式,您的示例建议您需要一个常量值。

2 XSL:使用 xsl:attribute 将属性添加到空的礼节

这是我的第一个问题,所以我希望我做对了.. 因此,我试图使用 xslt 将 xml 转换为具有不同结构的另一个 xml 并且我需要添加几个属性到一个emtpy并不确定如何。 结果 xml应该是这样的: xsl看起来像这样: 原来的 xml就是这个(我只显示第一行): 我怎样才能让它看起来像第一个? ...

2021-06-04 19:57:12 1 17   xml/ xslt
3 XSL使用其包含元素的位置更新属性

我试图更新一个如下所示的文档: 这样每个seg/@xml:id都会更新document/@n和document/@n中seg/()position的串联。 结果将是: 我正在尝试的代码是: 但它结果如下,重复相同的position() = 1 : 我要么不理 ...

4 使用xsl设置li元素的样式属性

我正在使用XSL文件将XML文件转换为XHTML文件。 我正在尝试创建元素li并将“样式”属性设置为值“ hello:” 我得到: 但是期待得到: 有人知道发生了什么吗? ...

5 如何使用xslt添加根元素?

我有一个XML文件,我只想保留以下标签: assetId, index, basis1, rate, spread, pors, matDate, notional, currNotional, fixingDate and intDays 这是原始XML文件的示例: 为此, ...

2019-05-14 09:43:32 1 16   xslt
6 将xmlns属性添加到根元素

我有C#程序来为Reporting Services中的鞭子秀报告生成RDL文件。 我使用Linq将Xml生成Xml。 当我尝试将xmlns XAttribute添加到报表元素时,遇到了几个问题。 我测试以下方法: 第一: 这是我的代码的一部分,显示如何生成xml: ...

7 将 xmlns 属性添加到根元素

一整天都在尝试简单地将xmlns属性添加到我的 xml 的根元素中,但似乎无法正确处理。 来源 = A.xml 期望的结果 = B.xml 我实现这个结果的最佳尝试是这个 xsd: 这就是结果。 不完全正确,因为它似乎会自动关闭&lt;INPUTS&gt;标签,而我希望它出现在 output 的最后 ...

2020-06-19 14:21:19 1 119   xml/ xslt
8 XSL:根据原始文档中的多个变量在根元素中设置XML属性

我有一个XML如下(为简便回答而简化): 我有一个XSL,它将检查att1和att2是否都是“是”,如果是,则将它们放入转换后的XML(格式类似)中。 我想要做的是,因为如果att1和att2都是“不”,除了以下内容之外不会返回任何内容: 在这种情况下,我想在根元素上标记 ...

2014-01-28 16:56:36 1 496   xml/ xslt
10 XSL故障:输出缺少根元素

过去,我已经完成了一些XSL转换,但是我似乎对此不太了解。 通过反复试验,我设法获得了几乎所需的输出,但是我无法弄清楚如何在输出中获得根元素。 这是XML文件输入的示例。 我需要清除一些不必要的信息并进入该CDATA。 到目前为止,这是我的XSL。 这太乱了,我不确定它是如何 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM