我有带标签的文件。我需要将“元素名称”的所有值从小写更改为大写。如果标签中有多个变量,则还应继续仅替换“元素名称”值。
输入文件:
<element name="product-info">
<element name="user-info" maxTimes="total-name">
<maxHelp="user-help">
请求的输出文件:
<element name="PRODUCT-INFO">
<element name="USER-INFO" maxTimes="total-name">
<maxHelp="user-help">
答案 0 :(得分:0)
sed 's/\([ \t\n\r\f]\)name="\([^"]*\)"/\1name="\U\2"/g' inputfile > outputfile
或者-为便于阅读,请使用扩展的正则表达式:
sed -E 's/(\sname=")([^"]+")/\1\U\2/g' inputfile > outputfile
答案 1 :(得分:0)
在经过谷歌搜索和反复试验后,XSLT:
$ cat file.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element/@name">
<xsl:attribute name="name">
<xsl:value-of select="translate(., $lowercase, $uppercase)" />
</xsl:attribute>
</xsl:template>
<xsl:template match="product/@id"/>
</xsl:stylesheet>
$ cat file.xml
<root>
<otherelement name="foo" />
<element name="product-info">
<element name="user-info" maxTimes="total-name">
<element maxHelp="user-help">
</element>
</element>
</element>
</root>
$ xsltproc file.xsl file.xml
<?xml version="1.0"?>
<root>
<otherelement name="foo"/>
<element name="PRODUCT-INFO">
<element name="USER-INFO" maxTimes="total-name">
<element maxHelp="user-help">
</element>
</element>
</element>
</root>