Xslt Xpath需要匹配三种不同的场景

Xslt Xpath需要匹配三种不同的场景,xslt,xpath,Xslt,Xpath,我一直在w3schools.com上阅读有关xpath轴的文章,我一直在尝试搜索帮助,但我很难弄清楚到底要搜索什么 我有一个xsl样式表,用于将各种xml文件转换为pdf打印。我一直坚持的一点是,当我需要更改某些格式时,我已经确定了至少3种不同的场景。我已经找到了一种方法来更改其中两种情况下的格式,但是第三种情况是其他两种情况的混合,并且我不断地得到两种格式集,当我只需要其中一种时,就会显示它们 请让我知道如果任何其他信息将是有用的,谢谢 情景1: <TASK> <RE

我一直在w3schools.com上阅读有关xpath轴的文章,我一直在尝试搜索帮助,但我很难弄清楚到底要搜索什么

我有一个xsl样式表,用于将各种xml文件转换为pdf打印。我一直坚持的一点是,当我需要更改某些格式时,我已经确定了至少3种不同的场景。我已经找到了一种方法来更改其中两种情况下的格式,但是第三种情况是其他两种情况的混合,并且我不断地得到两种格式集,当我只需要其中一种时,就会显示它们

请让我知道如果任何其他信息将是有用的,谢谢

情景1:

<TASK>
    <REVST>Some revised text
</TASK>

一些订正案文
情景2:

<LIST>
  <PARA>
    <REVST />Some Text <REVEND />
  </PARA>
</LIST>

一些文本
情景3:

<TASK>
   <PARA>
      <REVST />Some other revised text <REVEND />
   </PARA>
 </TASK>

其他一些订正案文
场景1的工作方式似乎是在样式表的一部分中包含此
,该部分对每个“项”都执行一个for,并遍历每个“项”。 场景2的工作方式似乎是将此测试
放在PARA模板中

但是对于场景3,我最终显示了这两种格式,而这两种格式都应该是来自PARA模板的格式

有什么建议吗?甚至是搜索词的建议?任何帮助都将不胜感激:)

我知道我有很多东西要学,我也很感谢提供的帮助,但我仍然不太明白如何在只有部分文本被指示要修改时,不显示整个文档的修订格式(页面右侧的一个栏)

<LIST>
<PARA>
    <REVST/>
    THIS IS SOME TEXT THAT SHOULD BE MARKED BY A REVISION BAR.
    <REVEND/>
</PARA>
</LIST>

这是一些应该用修订条标记的文本。
而像这样的案例,我需要显示整个文档的修订栏

<TASK>
  <ELE1/>
    <REVST/>
    <ELE2/>
    <TITLE>The Title</TITLE>
    <ELE3>
      <ELE4>
        <TITLE>General</TITLE>
        <LIST>
          <LITEM>
            <PARA>This is some paragraph text.</PARA>
          </LITEM>
        </LIST>
      </ELE4>
    </ELE3>
</TASK>

标题
一般的
这是一段文字。
我试着用已经介绍过的内容,但它似乎不适用,除非我在文本或段落部分添加*号。我可能也错过了一些东西

<xsl:template match="TASK/*text()[preceding-sibling::*[1][self::REVST] and following-sibling::*[1][self::REVEND]]">
    <fo:block color="red" border-right="solid black 2pt" margin-right="16pt">
        <xsl:apply-templates />
    </fo:block>
</xsl:template>
<xsl:template match="LIST1/*PARA/text()[preceding-sibling::*[1][self::REVST] and following-sibling::*[1][self::REVEND]]">
    <fo:block color="green" border-right="solid black 2pt" margin-right="16pt">
        <xsl:apply-templates />
    </fo:block>
</xsl:template>


还有什么建议吗?我仍然被卡住了:(

为什么不每次都使用完整路径:

/TASK/REVST
/LIST/PARA
/TASK/PARA/REVST

以下是如何做到这一点的方法:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match=
 "TASK/text()[preceding-sibling::*[1][self::REVST]
            and
              following-sibling::*[1][self::REVEND]
              ]">

  Processing Type1 of: "<xsl:value-of select="."/>"
 </xsl:template>

 <xsl:template match=
 "LIST/PARA/text()[preceding-sibling::*[1][self::REVST]
                 and
                   following-sibling::*[1][self::REVEND]
                   ]">

  Processing Type2 of: "<xsl:value-of select="."/>"
 </xsl:template>

 <xsl:template match=
 "TASK/PARA/text()[preceding-sibling::*[1][self::REVST]
                 and
                   following-sibling::*[1][self::REVEND]
                   ]">

  Processing Type3 of: "<xsl:value-of select="."/>"
 </xsl:template>
</xsl:stylesheet>
记住的规则

将XSLT用作…XSLT

这意味着:对于每个,总是喜欢使用模板而不是内联的
xsl:for each
。前者导致代码简短、简单、不易出错、干净、易于理解和维护。后者导致代码更长、更复杂、难看、像意大利面条一样容易出错、难以理解、难以扩展和维护

我一直在w3schools.com上阅读有关xpath轴的内容

这不是一个好的学习策略。w3schools可以很方便地查找你曾经知道但已经忘记的东西,但它不能帮助你理解基本概念。给自己买一本好书


你的帖子告诉我,你还没有理解上下文的重要概念。XPath表达式的含义在很大程度上取决于计算时上下文节点的位置。如果你确实理解上下文,我假设你会告诉我们这些表达式使用的上下文是什么。

你能接受吗有什么好书吗?我发现如果不先看一看,就很难选择一本书,而且书店里似乎也没有多少书。@froglander,Kay博士是关于XSLT和XPath的最好的书的作者。请在这里查看指向好的XSLT/XPath书籍和其他资源的链接集:谢谢你关于首选tem的建议板到内联xsl:for each。我一直在不断学习,并尝试尽可能地进行清理。使用xsl:for each的设置已经存在,所以我认为应该是这样的。我还有很长的路要走:)
<t>
 <TASK> <REVST/>Some revised text<REVEND/> </TASK>
 <LIST> <PARA> <REVST />Some other revisedext <REVEND /> </PARA> </LIST>
 <TASK> <PARA> <REVST />Some yet other revised text <REVEND /> </PARA> </TASK>
</t>
  Processing Type1 of: "Some revised text"


  Processing Type2 of: "Some other revisedext "


  Processing Type3 of: "Some yet other revised text "