需要一些xml节点concat的awk脚本

需要一些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">

我是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">
                <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>