2015-10-19 65 views
0

有什麼方法通過更改或添加基於節點兄弟/子值的屬性來修改XML?如何使用基於xml節點sibligs值的XSLT修改或添加XML屬性?

我需要改變:

<FieldMatchResult FieldName="Record_Amount"> 

爲以下之一:

<FieldMatchResult FieldName="Record_1_Amount"> 

<FieldMatchResult FieldName="Record_Amount" Tag="Record_1_Amount"> 

這裏是我的樣品,我需要從拉出值「行索引「元素

<?xml version="1.0"?> 
<ArtifactMatchResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
    <SubArtifacts> 
    <ArtifactMatchResult ArtifactName="Data Record"> 
     <Fields> 
     <FieldMatchResult FieldName="Record_Amount"> 
      <Values> 
      <anyType xsi:type="xsd:double">123456.5</anyType> 
      </Values> 
     </FieldMatchResult> 
     <FieldMatchResult FieldName="Record_Rate" > 
      <Values> 
      <anyType xsi:type="xsd:double">1.25</anyType> 
      </Values> 
     </FieldMatchResult> 
     <FieldMatchResult FieldName="Row Index"> 
      <Values> 
      <anyType xsi:type="xsd:double">1</anyType> 
      </Values> 
     </FieldMatchResult> 
     </Fields> 
     <SubArtifacts /> 
    </ArtifactMatchResult> 
    <ArtifactMatchResult ArtifactName="Data Record"> 
     <Fields> 
     <FieldMatchResult FieldName="Record_Amount"> 
      <Values> 
      <anyType xsi:type="xsd:double">123456.5</anyType> 
      </Values> 
     </FieldMatchResult> 
     <FieldMatchResult FieldName="Record_Rate" > 
      <Values> 
      <anyType xsi:type="xsd:double">1.25</anyType> 
      </Values> 
     </FieldMatchResult> 
     <FieldMatchResult FieldName="Row Index"> 
      <Values> 
      <anyType xsi:type="xsd:double">2</anyType> 
      </Values> 
     </FieldMatchResult> 
    </Fields> 
     <SubArtifacts /> 
    </ArtifactMatchResult> 
    </SubArtifacts> 
</ArtifactMatchResult> 

非常感謝任何指針。

+0

究竟你 「*基於節點的兄弟姐妹/子值*」 是什麼意思?請提供明確的標準:如果這樣,那麼,否則別的東西。 –

回答

2

使用以下同胞axis與下面的模板:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="XML" omit-xml-declaration="yes"/> 
    <xsl:template match="ArtifactMatchResult/SubArtifacts/ArtifactMatchResult/Fields"> 
    <FieldMatchResult FieldName="Record_Amount"> 
     <xsl:attribute name="Tag"> 
     <xsl:value-of select="concat('Record_', */following-sibling::FieldMatchResult[@FieldName = 'Row Index']/Values/anyType, '_Amount')" /> 
     </xsl:attribute> 
    </FieldMatchResult> 
    </xsl:template> 
</xsl:stylesheet> 
  • concat()會連接用逗號分隔的兩個或多個字符串。
  • *選擇上下文節點的所有子節點。
  • following-sibling::FieldMatchResult選擇所有後面的上下文節點的孩子FieldMatchResult兄弟節點。
  • [@FieldName = 'Row Index']選擇所有具有值爲'行索引'的FieldName屬性的節點。

這XSLT,適用於您的XML,給出以下結果:

<FieldMatchResult FieldName="Record_Amount" Tag="Record_1_Amount"/> 
    <FieldMatchResult FieldName="Record_Amount" Tag="Record_2_Amount"/> 
+0

我會在本週晚些時候發表它 感謝您的描述 – Marek

相關問題