当前位置: 首页 > 知识库问答 >
问题:

删除xml部分的Xsl转换

樊运乾
2023-03-14

1.删除所有值为空或值长度<1的节点属性,如示例所示:

mon-sun 12hr

应变为 mon-sun 12hr

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:if test=". != ''">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>
<pr:WorkingHoursInfo>
    <pr:WorkingHoursList>
              <pr:WorkingHours dayOfweek="MONDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="TUESDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="WEDNESDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="THURSDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="FRIDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="SATURDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="SUNDAY">
            </pr:WorkingHours>
    </pr:WorkingHoursList>
</pr:WorkingHoursInfo>
<pr:WorkingHoursInfo>
</pr:WorkingHoursInfo>

所以如果可能的话,我应该一次完成这两个转换。我目前被困在这个#2任何帮助都是学徒

问题更新:

PerMartin Honnen应答将xsl文件更改为:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="@*[not(normalize-space())]"/>
<xsl:template match="*[not(*/*) and not(*[normalize-space()])]"/>
</xsl:stylesheet>

来自Martin Honnen几乎工作,所以1工作,2工作(几乎)。一个例外是,没有子元素且没有文本值的单个元素不会被移除,即:

这也应该删除。所以差不多起作用了。

共有1个答案

年运珧
2023-03-14

你从

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

然后为您的任务添加模板。

<xsl:template match="@*[not(normalize-space())]"/>

确保删除空属性,并且

<xsl:template match="*[not(normalize-space()) and not(*/*) and not(*[normalize-space()])]"/>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>


<xsl:template match="@*[not(normalize-space())]"/>

<xsl:template match="*[not(normalize-space()) and not(*/*) and not(*[normalize-space()])]"/>

</xsl:stylesheet>
<pr:root
  xmlns:pr="http://example.com/pr">

<pr:WorkingHoursInfo>
    <pr:WorkingHoursList>
              <pr:WorkingHours dayOfweek="MONDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="TUESDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="WEDNESDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="THURSDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="FRIDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="SATURDAY">
            </pr:WorkingHours>
              <pr:WorkingHours dayOfweek="SUNDAY">
            </pr:WorkingHours>
    </pr:WorkingHoursList>
</pr:WorkingHoursInfo>

<pr:Text default="" approved="true" type="">Mon-Sun 12HR</pr:Text>

<pr:DescriptionAttribute Type="PRIMARY"/>

</pr:root>
<pr:root xmlns:pr="http://example.com/pr">

<pr:WorkingHoursInfo>

</pr:WorkingHoursInfo>

<pr:Text approved="true">Mon-Sun 12HR</pr:Text>



</pr:root>
 类似资料:
  • 问题内容: 输入XML 输出Json 如何编写通用的xslt样式表,它将输入的xml转换为json 输入可能在根目录下有太多结果,在结果下可能有系统和名称,在系统下还有ID名称和值。 问题答案: 我从此处复制并粘贴的以下XSLT 应该可以帮助您将XML转换为JSON。谢谢 :)

  • 我有以下xml。 我想要的是 我想做的是只使用名称空间xmlns:i=”获取节点GetPatientTreatmentTeamResult下的文本(该节点在不同的调用中会有所不同)http://www.w3.org/2001/XMLSchema-instance(所有调用都有这个)并且不使用实际的节点名。 我尝试过使用XmlParser和XmlSlurper 但我一直没能得到我想要的结果。 我该怎

  • 本文向大家介绍Python将xml和xsl转换为html的方法,包括了Python将xml和xsl转换为html的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python将xml和xsl转换为html的方法。分享给大家供大家参考。具体分析如下: 这里需要用libxml2,所以还要先安装了libxml2模块才能使用。代码如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 我有一个xml文档(输入文件不能更改),我需要用xsl转换到另一个xml。输入xsl有一个CDATA,如以下示例结构所示: 预期结果如下: 我的Xslt看起来像: 问题是xslt无法识别CDATA中的标记。如何为每个应用某种禁用输出转义?或者其他方法来解决这个问题?

  • 本文向大家介绍如何在XML文档上应用XSL转换?,包括了如何在XML文档上应用XSL转换?的使用技巧和注意事项,需要的朋友参考一下 <X:变换>标记适用于一个XML文档XSL转换。 属性 <X:变换>标签具有以下属性- 属性 描述 需要 默认 doc XSLT转换的源XML文档 没有 身体 docSystemId 原始XML文档的URI 没有 没有 xslt XSLT样式表提供转换说明 是 没有