Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 元素中的xslt更改属性_Xml_Xslt - Fatal编程技术网

Xml 元素中的xslt更改属性

Xml 元素中的xslt更改属性,xml,xslt,Xml,Xslt,我是xlst的初学者。我有以下xslt代码: , , , 如果转换后的源xml有某个子字段,我想更新“persname”的属性“@encodinganalog”。 例如,如果以下表达式为真: 我希望“encodinganalog”是“100美元一个” 如果以下所有表达式均为真: , , , “encodinganalog”的值应为“100$a$D$b$c” 如何做到这一点?您可以使用xsl:attribute向输出XML添加动态属性 <origination> <

我是xlst的初学者。我有以下xslt代码:


,
,
,
如果转换后的源xml有某个子字段,我想更新“persname”的属性“@encodinganalog”。 例如,如果以下表达式为真:


我希望“encodinganalog”是“100美元一个”

如果以下所有表达式均为真:


,
,
,
“encodinganalog”的值应为“100$a$D$b$c”


如何做到这一点?

您可以使用
xsl:attribute
向输出XML添加动态属性

<origination>
  <persname role="creator">
    <xsl:attribute name="encodinganalog">
      <xsl:text>100</xsl:text>
      <xsl:if test="marc:subfield[@code='a']">
        <xsl:text>$a</xsl:text>
      </xsl:if>
      <xsl:if test="marc:subfield[@code='D']">
        <xsl:text>$D</xsl:text>
      </xsl:if>
      <xsl:if test="marc:subfield[@code='b']">,
        <xsl:text>$b</xsl:text>
      </xsl:if>
      <xsl:if test="marc:subfield[@code='c']">
        <xsl:text>$c</xsl:text>
      </xsl:if>
    </xsl:attribute>
  </persname>
</origination>

100
一美元
美元
,
b美元
$c
注意,这里确实有一些代码重复,因此可以使用模板将其简化一点

<origination>
  <persname role="creator">
    <xsl:attribute name="encodinganalog">
      <xsl:text>100</xsl:text>
      <xsl:apply-templates select="marc:subfield[@code='a']" />
      <xsl:apply-templates select="marc:subfield[@code='D']" />
      <xsl:apply-templates select="marc:subfield[@code='b']" />
      <xsl:apply-templates select="marc:subfield[@code='c']" />
    </xsl:attribute>
  </persname>
</origination>

100
然后进行这样的模板匹配

 <xsl:template match="marc:subfield">
     <xsl:text>$</xsl:text>
     <xsl:value-of select="@code" />          
 </xsl:template>  

$

您可以使用
xsl:attribute
向输出XML添加动态属性

<origination>
  <persname role="creator">
    <xsl:attribute name="encodinganalog">
      <xsl:text>100</xsl:text>
      <xsl:if test="marc:subfield[@code='a']">
        <xsl:text>$a</xsl:text>
      </xsl:if>
      <xsl:if test="marc:subfield[@code='D']">
        <xsl:text>$D</xsl:text>
      </xsl:if>
      <xsl:if test="marc:subfield[@code='b']">,
        <xsl:text>$b</xsl:text>
      </xsl:if>
      <xsl:if test="marc:subfield[@code='c']">
        <xsl:text>$c</xsl:text>
      </xsl:if>
    </xsl:attribute>
  </persname>
</origination>

100
一美元
美元
,
b美元
$c
注意,这里确实有一些代码重复,因此可以使用模板将其简化一点

<origination>
  <persname role="creator">
    <xsl:attribute name="encodinganalog">
      <xsl:text>100</xsl:text>
      <xsl:apply-templates select="marc:subfield[@code='a']" />
      <xsl:apply-templates select="marc:subfield[@code='D']" />
      <xsl:apply-templates select="marc:subfield[@code='b']" />
      <xsl:apply-templates select="marc:subfield[@code='c']" />
    </xsl:attribute>
  </persname>
</origination>

100
然后进行这样的模板匹配

 <xsl:template match="marc:subfield">
     <xsl:text>$</xsl:text>
     <xsl:value-of select="@code" />          
 </xsl:template>  

$