XSLT1.0:搜索一个属性并添加到父元素



XML输入1:

<wine grape="chardonnay">
    <product>Carneros</product>
    <year>1997</year>
    <price>10.99</price>
    <Field attributes="gccxml(msgid=237)"/>
    <Field id="5" attributes=""/>
    <Field id="6" attributes=""/>
    <Field line="19"/>
</wine>

XML输入2:

<wine grape="chardonnay">
    <product>Carneros</product>
    <year>1997</year>
    <price>10.99</price>
    <Method attributes="gccxml(msgid=237)">
        <Argument location="f0:13"/>
    </Method>
    <Field line="19" attributes=""/>
</wine>

XML输出:

<wine grape="chardonnay" msgid="237">
  <product>Carneros</product>
  <year>1997</year>
  <price>10.99</price>
  <Method attributes="gccxml(msgid=237)">
    <Argument location="f0:13"/>
  </Method>
  <Field line="19"/>
</wine>

任务逻辑如下:分级第一个外观属性内容(即attributes="gccxml(msgid=237)")并将其添加到父元素中。注意,attributes可以在Field节点或Method节点中。此外,将attributes重命名为msgid,并将gccxml(msgid=237)转换为msgid="237"最后:XML输出应该只更新带有msgid="237"的父元素

Basically, it is quite easy to do 'hard coded' by grabing a specific attribute from a given node and copy to its parent element. 
In here, the complexity is to search thru the 'Field' and 'Method' nodes, to grad the first occurance where the 'attribute' is not null, to do some string manipulation and place it its the parent element.

基本上,通过从给定节点获取特定属性并复制到其父元素,可以很容易地进行"硬编码"。

In here, the complexity is to search thru the 'Field' and 'Method' nodes, to grad the first occurance where the 'attribute' is not null, to do some string manipulation and place it its the parent element.

在这里,复杂性是通过"字段"one_answers"方法"节点进行搜索,在"属性"不为null的地方第一次出现,进行一些字符串操作并将其放置为父元素。

任务逻辑如下:渐变第一个外观属性content(即attributes="gccxml(msgid=237)"),并将其添加到父项中要素

此部分可以通过以下方式轻松完成:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="/*">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:attribute name="msgid">
            <xsl:value-of select="//@attributes[string(.)][1]"/>
        </xsl:attribute>
        <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

此外,将属性重命名为msgid。。。

我们已经做到了。。。

并将gccxml(msgid=237)转换为msgid="237"

这种转换的逻辑并不十分清楚。


编辑

要提取gccxml(msgid=之后的数字,请使用:

<xsl:value-of select="substring-before(substring-after(//@attributes[string(.)][1], 'msgid='), ')')"/>

相关内容

  • 没有找到相关文章

最新更新