Xml xslt-如何指定单个节点值?

Xml xslt-如何指定单个节点值?,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,当我使用for each时,我会按列出的顺序获得所有标记值。我现在需要以不同的顺序显示这些值。所以,我放弃了for-each,尝试使用单个语句获得单个值,但没有成功。如何指定要显示的特定标记值?我正在使用XSLT1.0 我现在需要以不同的顺序显示这些值。所以,我 每个人都放弃了 这毫无意义。如果要以不同的顺序显示这些值,则需要对它们进行排序。请尝试以下样式表: XSLT1.0 结果将是: 你的问题不清楚。您想要一个TagValue吗?如果需要,是哪一个?还是要全部为非空?TagValues按特定

当我使用for each时,我会按列出的顺序获得所有标记值。我现在需要以不同的顺序显示这些值。所以,我放弃了for-each,尝试使用单个语句获得单个值,但没有成功。如何指定要显示的特定标记值?我正在使用XSLT1.0

我现在需要以不同的顺序显示这些值。所以,我 每个人都放弃了

这毫无意义。如果要以不同的顺序显示这些值,则需要对它们进行排序。请尝试以下样式表:

XSLT1.0

结果将是:


你的问题不清楚。您想要一个TagValue吗?如果需要,是哪一个?还是要全部为非空?TagValues按特定顺序排列-如果是,顺序是什么?这完成了任务,谢谢。我发现它不需要DocID,所以我从sort语句中删除了它,但发现它仍然检索到了它。通过将select TagValue的值封装在if位置>1,我克服了这一问题。@stevegenovese如果您不需要DocID值,您可以并且应该在select阶段删除它,例如,这也起到了作用,谢谢!正如您昨天提到的,它对所有非空标记值进行排序。我昨天没有提到的是,我正在html表中显示值,因此当它跳过空的TagValue时,它会将TagValue放在错误的表列中。有没有办法让for each也给我空的标记值?@stevegenovese我想有一个办法是显而易见的:删除[string@TagValue]选择表达式中的谓词。对于新手,您推荐哪些书籍/网站?
<Tags>
  <Tag TagName="#CC" TagDataType="Text" TagValue="" /> 
  <Tag TagName="#BCC" TagDataType="Text" TagValue="" /> 
  <Tag TagName="#To" TagDataType="Text" TagValue="" /> 
  <Tag TagName="#DocID" TagDataType="Text" TagValue="00000001" /> 
  <Tag TagName="#Date" TagDataType="DateTime" TagValue="20000917213300" /> 
  <Tag TagName="#Subject" TagDataType="Text" TagValue="" /> 
</Tags>


 <xsl:for-each select="Tags/Tag"> <!-- works, give me all tags -->

   <xsl:value-of select="@TagValue" />

 </xsl:for-each>        

<xsl:value-of select="Tags/Tag/@TagValue[1]" /> <!-- doesn't give me anything -
<?xml version="1.0" encoding="utf-8"?>
<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:template match="/">
    <output>
        <xsl:for-each select="Tags/Tag[string(@TagValue)]">
            <xsl:sort select="string-length(substring-before('#DocID#Date#To#CC#BCC#Subject', @TagName))" data-type="number" order="ascending"/>
            <value name="{@TagName}"><xsl:value-of select="@TagValue" /></value>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>
<Tags>
    <Tag TagName="#CC" TagDataType="Text" TagValue="" /> 
    <Tag TagName="#BCC" TagDataType="Text" TagValue="bcc recipient" /> 
    <Tag TagName="#To" TagDataType="Text" TagValue="" /> 
    <Tag TagName="#DocID" TagDataType="Text" TagValue="00000001" /> 
    <Tag TagName="#Date" TagDataType="DateTime" TagValue="20000917213300" /> 
    <Tag TagName="#Subject" TagDataType="Text" TagValue="my subject" /> 
</Tags>
<?xml version="1.0" encoding="UTF-8"?>
<output>
   <value name="#DocID">00000001</value>
   <value name="#Date">20000917213300</value>
   <value name="#BCC">bcc recipient</value>
   <value name="#Subject">my subject</value>
</output>