首先,我不是程序员。
我有一个巨大的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匹配。
答案 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) < 5]">
<term>
<xsl:copy-of select="*"/>
<termNote label="Short">Short</termNote>
</term>
</xsl:template>
然后以:
完成</xsl:stylesheet>
您应该可以使用任何XSLT处理器运行它;有很多可用的。如果没有别的想法,请下载KernowForSaxon(来自SourceForge),这是一个围绕我的Saxon处理器的非常简单的GUI界面。