用于XML到XML转换的XSLT

时间:2016-02-21 20:56:23

标签: xml xslt

我们要求XML文档中需要包含多个语言值。其中一些是希伯来语/阿拉伯语。

我正在尝试使用XSLT转换XML,以便可以在显示中更改短语的方向或使用它的任何内容。 下面是我们的格式示例。

<booklet>
<page><Short_name> IL</Short_name>
<Phrase>Arabic words 1</Phrase>
<Phrase>Arabic words 2</Phrase>
<Pagebreak> </Pagebreak>
</page><page><Short_name></Short_name>
<Phrase>english words 1</Phrase>
<Phrase>english words 2</Phrase>
<Phrase>english words 3</Phrase>
<Phrase>english words 4</Phrase>
</page></booklet>
下面的

是我正在寻找的XSLT文件

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <booklet>
      <xsl:for-each select="booklet/page">
        <page>
          <xsl:element name="Short_name">
            <xsl:value-of select="Short_name"/>
          </xsl:element>
          <xsl:for-each select="Phrase">
            <Phrase>
              <xsl:value-of select="@Phrase"/>
            </Phrase>
          </xsl:for-each>
          <xsl:element name="Pagebreak">
            <xsl:value-of select="Pagebreak"/>
          </xsl:element>
        </page>
      </xsl:for-each>
    </booklet>
  </xsl:template>
</xsl:stylesheet>

这不会呈现Phrase标记的值并始终显示null。不知道这里的错误是什么。

我还需要帮助将方向属性设置为具有阿拉伯语值的pharse的RTL,我可以使用短名称值检测它们,但不确定如何在XSLT中设置direction属性。

预期结果如下所示

<?xml version="1.0" encoding="utf-8"?>
<booklet xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <page>
    <Short_name>IL</Short_name>
    <Phrase>זהו מבחן עברי 1</Phrase>  **---- This phrase needs to be RTL**
    <Phrase>זהו מבחן עברי 2</Phrase>  ---- This phrase needs to be RTL
    <Phrase>זהו מבחן עברי 3</Phrase>  ---- This phrase needs to be RTL
    <Phrase>english wording 2 test</Phrase>  ---- This phrase needs to be LTR
    <Pagebreak> </Pagebreak>
  </page>
  <page>
    <Short_name></Short_name>
    <Phrase>English test 1</Phrase>   ---- This phrase needs to be LTR
    <Phrase>English test 2</Phrase>  ---- This phrase needs to be LTR
  </page>
</booklet>

1 个答案:

答案 0 :(得分:0)

我不确定预期的输出是什么(特别是关于RTL),但Phrase的问题是你在迭代它然后尝试将其值作为属性读取(这不是)。

以下更改会产生以下短语:

      <xsl:for-each select="Phrase">
        <Phrase>
          <xsl:value-of select="."/>
        </Phrase>
      </xsl:for-each>