需要一些xml节点concat的awk脚本
我是awk新手,需要一个简单的awk脚本来帮助我去除所有的字符度量和属性,从而将XML压缩很多 输入需要一些xml节点concat的awk脚本,xml,awk,Xml,Awk,我是awk新手,需要一个简单的awk脚本来帮助我去除所有的字符度量和属性,从而将XML压缩很多 输入 期望输出 <?xml version="1.0"?> <document> <page> <block bbox="270 163.717 363.262 224.155"> <line bbox="270 163.717 274.453 182.669">
期望输出
<?xml version="1.0"?>
<document>
<page>
<block bbox="270 163.717 363.262 224.155">
<line bbox="270 163.717 274.453 182.669">
<span bbox="270 163.717 274.453 182.669" font="Helvetica-Bold" size="16.02">foo</span>
</line>
<line bbox="270 200.519 363.262 224.155">
<span bbox="270 200.519 363.262 224.155" font="Helvetica-Bold" size="19.98">bar</span>
</line>
</block>
</page>
</document>
福
酒吧
谢谢 试试类似的方法
awk '{if (index($0, "<char") == 0) print $0}' xmlfile
awk'{if(index($0,”XML解析不建议使用标准的unixshell实用程序。这需要一个合适的XML解析器来完成
使用awk以下命令可获得您的输出(假设c=
属性始终位于
XML标记的第二位):
awk 'BEGIN {FS="\""} /<char /{tag = tag $4;}
/<\/span>/{print tag; tag="";} !/<char /' file.xml
awk'BEGIN{FS=“\”}/显然,您使用的是awk,尽管您知道XML
应该通过适当的工具进行加工。无论如何,必须提到的是,这确实是一种情况
使用6(或更高),类似这样的命令
java -jar saxon.jar input.xml stylesheet.xslt
通过以下样式表生成所需的结果:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="span">
<span>
<xsl:copy-of select="@*"/>
<xsl:for-each select="char/@c">
<xsl:value-of select="."/>
</xsl:for-each>
</span>
</xsl:template>
</xsl:stylesheet>
这只是去除字符,我实际上需要累积字符的“c”属性,并输出该缓冲区来代替所有的char节点。请参阅我想要的输出。在这种情况下,awk可能是错误的工具。awk用于处理行-我知道有一些方法可以让它保持某种状态,但这很痛苦。我会使用Python和BeautifulSoup来完成这项工作。这将非常简单。我用另一个awk answ进行了更新呃,但是@anubhava's可能更好,因为它没有换行符。再次更新-现在几乎相等,少了一行换行符,并且不依赖于
标记上的属性顺序或诸如此类的东西。事实上这非常接近。到目前为止,我得到的是{if(match)($0,/我意识到这一点,但输入是统一的,不是任意的。否则我会选择这种方式。thx.-1只需使用XSLT,而不是询问如何以最糟糕的方式进行操作。哇!甚至Perl!WTF.XSLT都不是这样做的正确方法,我知道这一点。其中的一部分是使用gawk。尽管这个grep会完全满足我的需要,但我知道它是正确的oo:[\r\n\s]*[\r\n\s]*
=>\1
awk 'BEGIN {FS="\""} /<char /{tag = tag $4;}
/<\/span>/{print tag; tag="";} !/<char /' file.xml
<?xml version="1.0"?>
<document>
<page>
<block bbox="270 163.717 363.262 224.155">
<line bbox="270 163.717 274.453 182.669">
<span bbox="270 163.717 274.453 182.669" font="Helvetica-Bold" size="16.02">
foo
</span>
</line>
<line bbox="270 200.519 363.262 224.155">
<span bbox="270 200.519 363.262 224.155" font="Helvetica-Bold" size="19.98">
bar
</span>
</line>
</block>
</page>
</document>
java -jar saxon.jar input.xml stylesheet.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="span">
<span>
<xsl:copy-of select="@*"/>
<xsl:for-each select="char/@c">
<xsl:value-of select="."/>
</xsl:for-each>
</span>
</xsl:template>
</xsl:stylesheet>