簡體   English   中英

測試XSL是否缺少屬性

[英]Test XSL for missing attribute

我知道有人問過類似的問題,但我無法弄清楚測試有什么問題。

這是XML樣式的3種變化; 我試圖找出<apsite:address>的值,空字符串或缺少的元素。

 <apsite:apsite xmlns="http://www.w3.org/1999/xhtml" >
  <apsite:name>John</apsite:name>
  <apsite:address>Some Address</apsite:name>
 </apsite:apsite>

<apsite:apsite xmlns="http://www.w3.org/1999/xhtml" >
  <apsite:name>John</apsite:name>
  <apsite:address></apsite:name>
 </apsite:apsite>

<apsite:apsite xmlns="http://www.w3.org/1999/xhtml" >
  <apsite:name>John</apsite:name>
</apsite:apsite>

我需要找到其中的值為空字符串或null的實例。 這些是我的前提條件。

                              <xsl:if  
                test="../apsite:address = ''">
                <dc:source>
                    <xsl:value-of select="." />
                </dc:source>
            </xsl:if>
            <xsl:if
                test="not(apsite:apsite/apsite:address)">
                <dc:source>
                    <xsl:value-of select="." />
                </dc:source>
            </xsl:if>
            <xsl:if
                test="../apsite:adress != ''">
                <dc:source>
                    <xsl:value-of select="../apsite:oldAddress" />
                </dc:source>
            </xsl:if>

我的空字符串測試有效,但缺少元素的測試無效,即test =“ not(apsite:apsite / apsite:address)”>無法正常工作。

有人可以告訴我我所缺少的嗎?

謝謝。

這個XSLT 1.0樣式表...

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:apsite="http://stackoverflow.com/questions/18524099" 
  xmlns:dc="some-other-url" >
<xsl:output indent="yes" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />  

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

<xsl:template match="apsite:address[.='']">
  <dc:source>
    <xsl:value-of select="'New value'" />
  </dc:source>
  <xsl:comment>&apos;address&apos; element was empty.</xsl:comment>
</xsl:template>

<xsl:template match="apsite:address[not(.='')]">
  <dc:source>
    <xsl:value-of select="." />
  </dc:source>
  <xsl:comment>Text of &apos;address&apos; element was copied.</xsl:comment>
</xsl:template>

<xsl:template match="apsite:apsite[not(apsite:address)]">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    <dc:source>
      <xsl:value-of select="'New value'" />
    </dc:source>
  </xsl:copy>
  <xsl:comment>&apos;address&apos; element was absent.</xsl:comment>
</xsl:template>


</xsl:stylesheet>

...依次應用於這3個可能的輸入文檔中的每個文檔時...

測試用例1:輸入文檔:

<apsite:apsite xmlns:apsite="http://stackoverflow.com/questions/18524099">
  <apsite:name>John</apsite:name>
  <apsite:address>Some Address</apsite:address>
</apsite:apsite>

測試案例2:輸入文檔:

<apsite:apsite xmlns:apsite="http://stackoverflow.com/questions/18524099">
  <apsite:name>John</apsite:name>
  <apsite:address></apsite:address>
</apsite:apsite>

測試案例3:輸入文檔:

<apsite:apsite xmlns:apsite="http://stackoverflow.com/questions/18524099">
  <apsite:name>John</apsite:name>
</apsite:apsite>

...產量分別...

測試用例1的輸出:

<apsite:apsite xmlns:apsite="http://stackoverflow.com/questions/18524099">
  <apsite:name>John</apsite:name>
  <dc:source xmlns:dc="some-other-url">Some Address</dc:source>
  <!--Text of 'address' element was copied.-->
</apsite:apsite>

測試案例2的輸出:

<apsite:apsite xmlns:apsite="http://stackoverflow.com/questions/18524099">
  <apsite:name>John</apsite:name>
  <dc:source xmlns:dc="some-other-url">New value</dc:source>
  <!--'address' element was empty.-->
</apsite:apsite>

測試用例3的輸出:

<apsite:apsite xmlns:apsite="http://stackoverflow.com/questions/18524099">
  <apsite:name>John</apsite:name>
  <dc:source xmlns:dc="some-other-url">New value</dc:source>
</apsite:apsite>
<!--'address' element was absent.-->

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM