格式化XML文章的特殊要求

格式化XML文章的特殊要求,xml,formatting,Xml,Formatting,我的客户要求一些特别的东西。让我们以以下XML为例: <?xml version="1.0"?> <article> <paragraph> <w p='0'>This</w> <w p='1'>is</w> <w p='2'>the</w> <w p='3'>first</w> <w p='4'>paragr

我的客户要求一些特别的东西。让我们以以下XML为例:

<?xml version="1.0"?>
<article>
  <paragraph>
    <w p='0'>This</w>
    <w p='1'>is</w>
    <w p='2'>the</w>
    <w p='3'>first</w>
    <w p='4'>paragraph</w>
    <w p='p'>.</w>
  </paragraph>
  <paragraph>
    <w p='0'>This</w>
    <w p='1'>is</w>
    <w p='2'>the</w>
    <w p='3'>second</w>
    <w p='4'>paragraph</w>
    <w p='p'>.</w>
  </paragraph>
</article>
我的客户想要折叠所有的单词,但不是我们技术人员所说的折叠。他们想要的是隐藏单词节点信息,而不是单词本身,因此在它们的折叠含义之后,应该如下所示:

<?xml version="1.0"?>
<article>
  <paragraph>This is the first paragraph.</paragraph>
  <paragraph>This is the second paragraph.</paragraph>
</article>
我所说的只是外观,而不是底层内容,不应该通过这种折叠来改变。但是,用户仍然可以选择一个单词,并通过应用程序界面以某种方式更改其属性或单词本身

我的问题是,有没有现成的库我正在使用的C或应用专门这种需求

谢谢


彼得

这个要求没有什么特别之处。这是一种每天使用XSLT进行数千次的例行处理

很难从示例中推断转换规则,特别是确切地知道应该在何处插入空格。您在每个单词前都插入了空格,除了第一个和仅包含。。如果这真的是规则,那么您的转换将如下所示:

<xsl:transform match="paragraph">
 <paragraph><xsl:apply-templates/></paragraph>
</xsl:transform>

<xsl:template match="w[1]" priority="3">
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="w[.='.']" priority="2">
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="w" priority="1">
  <xsl:value-of select="concat(' ', .)"/>
</xsl:template>

实际上,对于数据中突然出现的其他内容,您可能需要额外的规则。

嗨,Michael,谢谢您的回复。空间插入是另一个问题。我的观点是所谓的折叠我的客户请求。折叠后,用户仍然可以选择折叠的节点单词并进行一些标记,例如更新属性等。好吧,我完全被您的要求搞糊涂了。您既说应该删除原始的单词级标记,也说应该保留它。你不能两者兼得。嗨,迈克尔,很抱歉,我在最初的帖子里没有说得足够清楚。我添加了一个编辑。