去除标签的xml文档,删除换行符并添加自定义换行符

Posted

技术标签:

【中文标题】去除标签的xml文档,删除换行符并添加自定义换行符【英文标题】:Stripping xml document of tags, removing line breaks and adding custom line breaks 【发布时间】: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

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

【问题讨论】:

【参考方案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 类型即可。

【讨论】:

以上是关于去除标签的xml文档,删除换行符并添加自定义换行符的主要内容,如果未能解决你的问题,请参考以下文章

整合去除HTML 标签, 去除开头结尾换行,将连续空格合并为一个

自定义 TableViewCell 中的标签不能是多行或换行

python去除字符串中的换行符

Bash:从输出中去除尾随换行符

模仿微信标签功能的自动换行线性布局(自定义流式标签组件)

模仿微信标签功能的自动换行线性布局(自定义流式标签组件)