【问题标题】:Split xml string at ">在“>”处拆分 xml 字符串
【发布时间】:2013-11-13 17:18:17
【问题描述】:

我有一个只有一个值的简单 xml 文件(稍后会更长),

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="cr.xsl"?>
<companyroutes>
  <route name="EKCHLOWI">SALLO UM44 KOGIM UM725 BESKO UZ36 MAREM UT106 VESUB T106 NETES T700 DEGIN UP31 DOSEL</route>
  <route name="ENGMEDDF">ENGM TOR P615 LBE N850 PIROT T152 KERAX EDDF</route>
</companyroutes>

我需要通过 xslt 将其转换为网页上的表格,但我需要将输出显示为:

**EKCHLOWI** SALLO UM44 KOGIM UM725 BESKO UZ36 MAREM UT106 VESUB T106 NETES T700 DEGIN UP31 DOSEL

由于该行只有一个“名称”,我如何将字符串拆分为两个表,分别在 "> ? cr.xsl 会是什么样子?

xml 被第三部分软件使用,所以我无法操作它,因为如果我更改语法格式它将无法工作。 我无法将&lt;catalog&gt; 插入 xml 文件或将数据拆分为

...我是个新手...

编辑: html 应该如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
      <html>
      <body>
      <h2>BBL - CompanyRoutes</h2>
      <table border="1">
        <tr>
          <th>Route Name</th>
          <th>Route</th>
        </tr>
        <xsl:for-each select="????">
        <tr>
          <td><xsl:value-of select="Route Name"/></td>
          <td><xsl:value-of select="Route"/></td>
        </tr>
        </xsl:for-each>
      </table>
      </body>
      </html>
    </xsl:template>

    </xsl:stylesheet>

...在示例之后为:http://www.w3schools.com/xsl/xsl_transformation.asp

请注意,我只有 ????我应该在哪里引用 .xml 文件中的目录,但我没有。

【问题讨论】:

  • 我想我不明白这个问题。您可以使用这样的 xPath 获取属性值:/route@name 以及可以使用此 xPath /route/text() 获取的文本节点的值。如果您随后创建了一个&lt;xsl:for-each select='//route'&gt; 循环并使用xPath @nametext() 检索值,那么您应该拥有所需的一切。
  • 是否可以显示您希望输出的实际 HTML 代码?目前,您提到了一个“表”,但看起来您只是希望将其作为单个字符串输出。另外,您可以使用 XSLT 2.0,还是只使用 XSLT 1.0?

标签: xml xslt split


【解决方案1】:

回答您更新的问题:

你的 for each 循环应该选择每个路由元素。像这样:

<xsl:for-each select="//route">

并且路由名称和路由的正确xPaths应该是这样的:

<tr>
  <td><xsl:value-of select="./@name"/></td>
  <td><xsl:value-of select="./text()"/></td>
</tr>

这当然假设您有这样的输入:

<?xml version="1.0" encoding="utf-8"?>
<companyroutes>
  <route name="EKCHLOWI">SALLO UM44 KOGIM UM725 BESKO UZ36 MAREM UT106 VESUB T106 NETES T700 DEGIN UP31 DOSEL</route>
  <route name="ENGMEDDF">ENGM TOR P615 LBE N850 PIROT T152 KERAX EDDF</route>
</companyroutes>

【讨论】:

  • 太好了。开始使用新的库/技术始终是最困难的部分。如果您的问题已解决,请不要忘记接受答案(勾选绿色复选标记),以便其他人不再费心回答已经解决的问题。
猜你喜欢
  • 2018-04-09
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多