基于单词长度插入

时间:2012-09-11 10:40:55

标签: xml regex character

首先,我不是程序员。

我有一个巨大的XML文件,其中包含如下所述的术语:

<term>
<termId>MANUAL000399</termId>
<termUpdate>Add</termUpdate>
<termName>care</termName>
<termType>Pt</termType>
<termStatus>Active</termStatus>
<termApproval>Approved</termApproval>
<termCreatedDate>20120618T14:38:20</termCreatedDate>
<termCreatedBy>admin</termCreatedBy>
<termModifiedDate>20120618T14:40:41</termModifiedDate>
<termModifiedBy>admin</termModifiedBy>
</term>

在文件中,术语有

<termType>

Pt或ND

我希望这个解决方案适用于两者。 我想做的是能够通过,查看单词长度     termName 如果其中少于5个字符,请附加另一个属性

<termNote> 

之后的

<termModifiedBy> 

属性:

<term>
<termId>MANUAL000399</termId>
<termUpdate>Add</termUpdate>
<termName>care</termName>
<termType>Pt</termType>
<termStatus>Active</termStatus>
<termApproval>Approved</termApproval>
<termCreatedDate>20120618T14:38:20</termCreatedDate>
<termCreatedBy>admin</termCreatedBy>
<termModifiedDate>20120618T14:40:41</termModifiedDate>
<termModifiedBy>admin</termModifiedBy>
<termNote label="Short">Short</termNote>
</term>

任何人都可以建议最好的方法吗?我在这里发现了正则表达式,但问题是它们的应用,我发现有人建议/ \ b [a-zA-Z] {5,} \ b /但是我不知道如何编写一个带有这个和然后插入termNote匹配。

1 个答案:

答案 0 :(得分:0)

这种转换可以通过简单的XSLT样式表来完成。 (XSLT是一种非程序员经常比程序员更热情的语言。样式表基本上是一组转换规则:当你看到匹配X的东西时,用Y替换它。当然,一旦你掌握了XSLT,你就可以称自己为程序员。

首先是一些样板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/> <!-- removes whitespace from the input -->
<xsl:output indent="yes"/>      <!-- adds whitespace to the output -->

然后是一个默认模板规则,如果没有更具体的规则,则复制事物:

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

然后是匹配短期的模板规则:

<xsl:template match="term[string-length(termName) &lt; 5]">
  <term>
    <xsl:copy-of select="*"/>
    <termNote label="Short">Short</termNote>
  </term>
</xsl:template>

然后以:

完成
</xsl:stylesheet>

您应该可以使用任何XSLT处理器运行它;有很多可用的。如果没有别的想法,请下载KernowForSaxon(来自SourceForge),这是一个围绕我的Saxon处理器的非常简单的GUI界面。