【问题标题】:Stripping xml document of tags, removing line breaks and adding custom line breaks去除标签的xml文档,删除换行符并添加自定义换行符
【发布时间】:2010-09-18 20:44:06
【问题描述】:

我向 xml Web 服务发出请求,然后得到响应。这个响应,作为一个流,然后被保存到一个字符串中。问题是,响应中充满了标签、CDATA 等(如您所料)。正如预期的那样,也没有换行。

我想获取这个代表 xml 文档的字符串,并去掉它的所有标签,但保留实际值,同时确保每条记录都在一行中,所以:

<Record>
  <name>adam</name>
  <telephoneno>000</telephonenumber>
</Record>
<Record>
  <name>mike</name>
  <telephoneno>001</telephonenumber>
</Record>

将转化为:

adam 000
mike 001

标题是一个简单的问题,但我怎样才能做到这一点?我已经尝试过数据表和数据集,但我认为它们对实现我想要做的事情没有很大的支持。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    这正是 XSLT 的用途!它将 XML 文件转换为不同的输出。在您的情况下,您可以使用相对简单的 XSL 转换来输出列表。

    这可能会做到:

    records.xml:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="style.xsl"?>
    <Records>
      <Record>
        <name>adam</name>
        <telephonenumber>000</telephonenumber>
      </Record>
      <Record>
        <name>mike</name>
        <telephonenumber>001</telephonenumber>
      </Record>
    </Records>
    

    style.xsl

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
      <xsl:template match="Record">
        <xsl:value-of select="name"/><xsl:text> </xsl:text><xsl:value-of select="telephonenumber"/>
      </xsl:template>
    </xsl:stylesheet>
    

    我用this tool 对其进行了测试,它可以工作。

    【讨论】:

    • 一般来说,如果一个转换发出文本,你应该将 xsl:output 方法设置为“文本”。在这个特定的变换中它不会改变任何东西(尽管它会改变一些)。但我见过 XML 工具检查方法以查看它们是否应该检查输出的格式是否正确,您不希望这里出现这种情况。
    【解决方案2】:

    Michael Haren 的 XSLT 响应是最佳答案。

    但是,如果您实际上并不想要 XML 形式的响应,您可以从 Web 服务返回您想要的任何内容(前提是它是您的,而不是第三方服务)。

    没有规定 Web 服务必须返回 XML。只需确保提供适当的 MIME 类型即可。

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 2021-08-12
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2014-12-22
      相关资源
      最近更新 更多