标签: xslt

如何从xml文件中删除重复的元素?

我有一个XML文件

<ns0:Employees xmlns:ns0="http://TestIndexMap.Employees">
  <Employee FirstName="FirstName_0" LastName="LastName_1" dept="dept_2" empNumber="1">
    <Schedules>
      <Schedule Date_join="2008-01-20" Date_end="2008-01-30" />
    </Schedules>
  </Employee>
  <Employee FirstName="FirstName_0" LastName="LastName_1" dept="dept_2" empNumber="2">
    <Schedules>
      <Schedule Date_join="2008-01-20" Date_end="2008-01-30" />
    </Schedules>
  </Employee>
  <Employee FirstName="FirstName_2" LastName="LastName_1" dept="dept_2" empNumber="2">
    <Schedules>
      <Schedule Date_join="2007-01-21" Date_end="2007-12-30" />

    </Schedules>
  </Employee>
  <Employee FirstName="FirstName_2" LastName="LastName_1" dept="dept_2" empNumber="2">
    <Schedules>
      <Schedule Date_join="2007-01-21" Date_end="2007-12-30" />
      <Schedule Date_join="2008-06-20" Date_end="2008-01-30" />

    </Schedules>
  </Employee>
</ns0:Employees>
Run Code Online (Sandbox Code Playgroud)

我想根据fistname,姓氏和date_join以及data_end删除重复项.

请问,有人可以解释如何使用XSLT实现这一目标吗?

xml xslt xpath

0
推荐指数
1
解决办法
1万
查看次数

使用XSLT 1.0将字符串限制为列入白名单的字符

使用XSLT 1.0,给定一个包含任意字符的字符串,如何找回符合以下规则的字符串.

  1. 第一个字符必须是以下字符之一:az,AZ,冒号或下划线
  2. 所有其他字符必须是上述任何字符或0-9,句点或连字符
  3. 如果任何字符不符合上述规则,请将其替换为下划线

背景

在XSLT中,我将一些属性转换为元素,但我需要确保该属性不包含任何不能在元素名称中使用的值.我不关心转换为名称的属性的完整性,只要它被可预测地转换.我也不需要补偿元素名称中的每个有效字符(有一堆).

我遇到的问题是有空格的属性,translate函数可以很容易地转换为下划线:

translate(@name,' ','_')
Run Code Online (Sandbox Code Playgroud)

但是不久之后我发现了一些使用斜杠的属性,所以我现在也必须添加它.这很快就会失控.我希望能够定义允许字符的白名单,并用下划线替换任何不允许的字符,但翻译可以通过替换黑名单来实现.

string xslt whitelist

0
推荐指数
1
解决办法
2378
查看次数

如何使用XSL动态设置属性值

我是 xslt 的新手,我正在做一个聊天应用程序,我想将用户会话保存为 xml 文件,这些文件以用户预定义的颜色和字体显示,所以我使用 xslt 来实现这一点,但我不知道如何从 xml 中获取字体并将其应用到 html 标记中,以便它以用户选择的字体显示。

<xsl:choose>
    <xsl:when test="/body/msg[italic/text()='true']">
        <i>
            <font family="/body/msg[font/text()] color="/body/msg/color">
                <xsl:value-of select="from" /><p>: </p>
                <xsl:value-of select="content"/><br/>
            </font>
        </i>
    </xsl:when>
    <xsl:when test="/body/msg[bold/text()='true']">
        <b>
            <font family="/body/msg[font/text()]" color="/body/msg/color">
                <xsl:value-of select="from" /><p>: </p>
                <xsl:value-of select="content"/><br/>
            </font>
        </b>
    </xsl:when>
    <xsl:when test="/body/msg[bold/text()='true'] and /body/msg[italic/text()='true']">
        <b>
            <i>
                <font family="/body/msg[font/text()]" color="/body/msg/color">
                    <xsl:value-of select="from" /><p>: </p>
                    <xsl:value-of select="content"/><br/>
                </font>
            </i>
        </b>
    </xsl:when> 
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)

html java xml xslt

0
推荐指数
1
解决办法
4861
查看次数

更改 ESB 中的 xml 节点名称

我想更改 WSO2 ESB 中的 xml 节点名称,即。我有以下 xml

<MessageStatus xmlns="foo.example.org">
<ErrorCode>$1</ErrorCode>
<Message>$2</Message>
</MessageStatus>

我希望它是这样的

<ItemName xmlns="foo.example.org">
<ErrorCode>$1</ErrorCode>
<Message>$2</Message>
</ItemName>

以 ItemNames 作为属性;我的意思是它们会动态变化。有什么方法可以使用 ESB 中介器进行此更改吗?

xslt esb wso2 wso2-esb

0
推荐指数
1
解决办法
884
查看次数

如何在HTML中制作多级列表?

我正在解析 XML 文档并使用它创建 HTML 列表。我遇到过一种情况,我需要从 XML 数据中创建一个多级列表。例如:

1. One
2. Two
  2.1. Three
  2.2. Four
    2.2.1. Five
    2.2.2. Six
  2.3. Seven
3. Eight
Run Code Online (Sandbox Code Playgroud)

是否可以最好使用 HTML 创建这样的结构<ul>-<li>s?我遇到过一些建议在 CSS 中使用的解决方案counter-incretemnt, counter-reset,但问题是由于 XML 的结构,这种解决方案对于我的情况不可行,而且使用 XSLT 编写它会非常困难。

谁能建议我解决这个问题?

注意:列表的级别没有限制!

提前谢谢!

编辑:为上述所需的 HTML 列表添加示例 XML:

<ele lvl="0">
  One
</ele>
<ele lvl="0">
  Two
</ele>
<ele lvl="1">
  Three
</ele>
<ele lvl="1">
  Four
</ele>
<ele lvl="2">
  Five
</ele>
<ele lvl="2">
  Six
</ele>
<ele lvl="1">
  Seven
</ele>
<ele lvl="0">
  Eight
<ele>
Run Code Online (Sandbox Code Playgroud)

html xml xslt html-lists

0
推荐指数
1
解决办法
2241
查看次数

xsl:value-of 删除 XML 数据中的 HTML 标签

我创建了包含 html 标签的 xml,如下所示。我尝试根据我的xslt将所有xml数据转换为html。但是,我无法处理 xml 中包含的 html 标签。我需要获取所写的摘要标签中的任何内容(不丢失 html 标签)。我应该怎么办 ?

<checklist name="00.07-Parts">
<summary>
  <table border="1" cellpadding="7" cellspacing="0" style="width:100%">
  <tbody>
    <tr>
        <td>
        <p><strong> aaaaaaa </strong></p>
        </td>
        <td>
        <p><strong> bbbbbbbb </strong></p>
        </td>
    </tr>           
  </tbody>
  </table>
</summary>
</checklist>
Run Code Online (Sandbox Code Playgroud)

这是我的 XSLT 部分

<xsl:for-each select="checklist">
          <table class="tbChecklist">
            <tbody>
              <tr>
                <td>
                  <h4>
                    <xsl:value-of select="@name"/>
                  </h4>
                </td>
              </tr>
              <tr>
                <td>
                    <xsl:value-of select="summary"/>                                   
                </td>
              </tr>
            </tbody>
          </table>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

这是结果

  <table class="tbChecklist">
  <tbody>
      <tr>
         <td>
             <h4>00.07-Parts</h4>
         </td>
      </tr>
      <tr>
      <td>
            aaaaaaa
            bbbbbbbb
      <td>
      <tr>
   </tbody>
 </table>
Run Code Online (Sandbox Code Playgroud)

html xml xslt

0
推荐指数
1
解决办法
1454
查看次数

在 XSLT 中使用 OR

我在 XSLT 中使用 or 运算符时遇到问题。我需要测试变量是否不等于 00 或 09。

当前输入 XSLT 的 Timecodehour 值为 09。我使用下面的测试来确认该值必须是 00 或 09。

<xsl:template match="/">

<xsl:if test="$TimecodeHour!='00' or $TimecodeHour!='09'">
    <xsl:message terminate="yes">Timecode is not supported</xsl:message>
</xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

如果我删除了“$TimecodeHour!='00' or”,但提交的消息“时间码在我再次添加时不受支持”,则测试会正确完成。有人可以帮助我理解我做错了什么吗?

xslt

0
推荐指数
1
解决办法
5618
查看次数

如何理解 xslt 语法 [not(.=preceding::*)]

我正在查看我的同事创建的 XSLT 文件,它包含以下代码片段:

<xsl:for-each select="/vpf:Msg/vpf:Body/vpf:Payload[./@id=&apos;atom6&apos;]/row/DocEntry[not(.=preceding::*)]">
                <DocEntry>
                    <xsl:value-of select="."></xsl:value-of>
                </DocEntry>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

[not(.=preceding::*]
在阅读了一些关于锚点的用法之后,我很难理解这部分preceding,在我看来,这部分根本没有做任何事情。有人可以帮助我了解我的同事可能想在这里做什么吗?

xml xslt

0
推荐指数
1
解决办法
1527
查看次数

如何从命令行运行 Saxon

任何人都可以发布详细的分步说明,说明如何安装 Saxon (10 HE) 以及如何从 MacOS (10.13.6) 中的命令行运行转换?

我已经在我的电脑上安装了Java。
我已经SaxonHE10-6J.zip从 SourceForge 下载了该文件。
根据此处的建议,我已将其放入文件夹saxon-he-10.6.jarmyUserName/Library/Java/Extensions然后我打开终端应用程序并输入基于此答案的
命令:

java -jar saxon-he-10.6.jar -'/Users/myUserName/Documents/path/to/mystylesheet.xsl' -s:'/Users/myUserName/Documents/path/to/some.xml'
Run Code Online (Sandbox Code Playgroud)

这导致:

Unable to access jarfile saxon-he-10.6.jar
Run Code Online (Sandbox Code Playgroud)

我的所有尝试(包括将 .jar 文件移动到/Library/Java/Extensions 目录或在命令中包含 .jar 文件的完整路径)都失败了,并出现相同的错误消息。

请注意,我不是 Java 开发人员,我不打算在应用程序中使用它。我想要的只是能够偶尔进行一次转变。

我还应该注意,XML 和 XSLT 文件的位置可能会因情况而异。我希望能够将 .jar 文件保留在恒定位置,并根据需要提供 XML 和 XSLT 文件的路径 - IOW,我想要一个命令模板,我只需要更改 2 个文件路径(并且可能为转换添加一些选项)。

我需要做什么?

java xslt macos command-line saxon

0
推荐指数
1
解决办法
4091
查看次数

XPath translate() 函数和(分解)组合的 Unicode 字符

采用以下 XSLT 代码:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\n    version="2.0">\n    <xsl:output method="text"/>\n    <xsl:template match="/">\n        <xsl:value-of select="translate('abc', 'e\xcc\x81abc', 'eabc')"/>  <!--0x65CC81-->\n        <xsl:value-of select="'&#10;'"/>\n        <xsl:value-of select="translate('abc', '\xc3\xa9abc', 'eabc')"/>  <!--0xC3A9-->\n    </xsl:template>\n</xsl:stylesheet>\n
Run Code Online (Sandbox Code Playgroud)\n

使用 Saxon 10 运行此命令会返回:

\n
bc\nabc\n
Run Code Online (Sandbox Code Playgroud)\n

翻译函数的第一次调用使用 \xc3\xa9 的分解形式(U+0065 和 U+0301),而第二次调用则使用 U+00E9。看来他们并没有受到平等的对待。这是可以预料的吗?这种行为是否在某处指定?

\n

xslt xpath

0
推荐指数
1
解决办法
179
查看次数

标签 统计

xslt ×10

xml ×5

html ×3

java ×2

xpath ×2

command-line ×1

esb ×1

html-lists ×1

macos ×1

saxon ×1

string ×1

whitelist ×1

wso2 ×1

wso2-esb ×1