如何从XML文件中删除节点作为命令行?

费利克斯

我有一个包含标签</w:rPr>多次的xml文件这样使用

<w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/></w:rPr>

但是,标签本身之间的内容有时会有所不同。是否可以使用sed或其他方法删除<w:rPr>之间的所有内容</w:rPr>,然后再删除两个标签?

相关名称空间

xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"

以及文件本身的一部分(格式化的有效XML)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:numbering xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid wp14">
  <w:abstractNum w:abstractNumId="0" w15:restartNumberingAfterBreak="0">
    <w:nsid w:val="FFFFFF89"/>
    <w:multiLevelType w:val="singleLevel"/>
    <w:tmpl w:val="CB2CEC0E"/>
    <w:lvl w:ilvl="0">
      <w:start w:val="1"/>
      <w:numFmt w:val="bullet"/>
      <w:pStyle w:val="Aufzhlungszeichen"/>
      <w:lvlText w:val="ï‚·"/>
      <w:lvlJc w:val="left"/>
      <w:pPr>
        <w:tabs>
          <w:tab w:val="num" w:pos="360"/>
        </w:tabs>
        <w:ind w:left="360" w:hanging="360"/>
      </w:pPr>
      <w:rPr>
        <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/>
      </w:rPr>
    </w:lvl>
  </w:abstractNum>

  <!-- ... -->

 <w:abstractNum w:abstractNumId="16" w15:restartNumberingAfterBreak="0">
    <w:nsid w:val="6F8046F9"/>
    <w:multiLevelType w:val="hybridMultilevel"/>
    <w:tmpl w:val="1F3A6CE4"/>
    <w:lvl w:ilvl="0" w:tplc="DE32BBA8">
      <w:start w:val="1"/>
      <w:numFmt w:val="lowerLetter"/>
      <w:lvlText w:val="%1)"/>
      <w:lvlJc w:val="left"/>
      <w:pPr>
        <w:ind w:left="682" w:hanging="567"/>
      </w:pPr>
      <w:rPr>
        <w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" w:cs="Arial" w:hint="default"/>
        <w:spacing w:val="-1"/>
        <w:w w:val="100"/>
        <w:sz w:val="22"/>
        <w:szCs w:val="22"/>
        <w:lang w:val="de-DE" w:eastAsia="de-DE" w:bidi="de-DE"/>
      </w:rPr>
    </w:lvl>

    <!-- ... -->

    <w:lvl w:ilvl="8" w:tplc="E4341C34">
      <w:numFmt w:val="bullet"/>
      <w:lvlText w:val="•"/>
      <w:lvlJc w:val="left"/>
      <w:pPr>
        <w:ind w:left="7581" w:hanging="567"/>
      </w:pPr>
      <w:rPr>
        <w:rFonts w:hint="default"/>
        <w:lang w:val="de-DE" w:eastAsia="de-DE" w:bidi="de-DE"/>
      </w:rPr>
    </w:lvl>
  </w:abstractNum>

  <!-- ... -->

  <w:num w:numId="1">
    <w:abstractNumId w:val="15"/>
  </w:num>
  <w:num w:numId="2">
    <w:abstractNumId w:val="6"/>
  </w:num>

  <!-- ... -->

</w:numbering>
吉尔·奎诺(Gilles Quenot)

当然,这是(适当的XML解析器)和他的朋友,如下所示:

xmlstarlet ed -L \
              -N w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" \
              -d '//w:rPr' file.xml

一点解释:

  • -L编辑文件对飞sed -i
  • -N设置XML命名空间(如果需要)
  • -d删除匹配xpath表达式的节点

查看 xmlstarlet edit --help

TL; DR

,永远不要使用来完成这项任务!

每当你使用sedhtml还是xml,你杀了一只小猫咪

理论 :

根据编译理论,不能使用基于有限状态机的正则表达式来解析XML / HTML 由于XML / HTML的层次结构,您需要使用下推式自动机使用YACC之类的工具来处理LALR语法

在现实生活中©®™日常工具

您可以使用以下之一:

xmllint通常在默认情况下与libxml2xpath1一起安装

xmlstarlet可以编辑,选择,转换...默认情况下未安装,xpath1

通过perl的模块XML :: XPath,xpath1安装的xpath

xidel xpath3

saxon-lint我自己的项目,@ Michael Kay的Saxon-HE Java库xpath3的包装器

或者您可以使用高级语言和适当的库,我想到:

lxmlfrom lxml import etree

XML::LibXMLXML::XPathXML::Twig::XPathHTML::TreeBuilder::XPath

检查此示例

DOMXpath检查这个例子


检查:将正则表达式与HTML标记一起使用

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在命令行中删除特定文件

来自分类Dev

在命令行中删除特定文件

来自分类Dev

如何将XML文件内容作为命令行参数传递给Java命令?

来自分类Dev

如何将XML文件内容作为命令行参数传递给Java命令?

来自分类Dev

如何在命令行中从目录B中的目录A中删除匹配的文件?

来自分类Dev

如何使用命令行删除大量的._文件

来自分类Dev

如何通过命令行删除特定文件?

来自分类Dev

如何使用linux命令行删除文件夹

来自分类Dev

如何使用命令行删除Time Machine文件

来自分类Dev

删除名称以“?”开头的文件 在命令行中

来自分类Dev

如何使用命令行从文件名中删除字符?

来自分类Dev

如何使用常见的Linux命令行工具从javascript文件中删除所有注释?

来自分类Dev

如何从ruby文件中运行命令行命令?

来自分类Dev

文件路径作为命令行参数

来自分类Dev

如何从命令行部分打印XML文件?

来自分类Dev

如何从命令行解析 XML 文件(对于 GeekTool)?

来自分类Dev

如何从Unix命令行在XML文件中添加换行符?

来自分类Dev

如何通过命令行在XML文件的标记中添加属性?

来自分类Dev

如何使用 XSLT 3.0 从命令行解析 XML 文件中的 XInclude 指令

来自分类Dev

节点js中的命令行参数

来自分类Dev

如何从此命令行中删除搜索PID?

来自分类Dev

在Autohotkey中,如何删除命令行的.java部分?

来自分类Dev

如何在命令行中删除Blender?

来自分类Dev

如何从命令行删除MacOS中的目录?

来自分类Dev

如何从 Ubuntu 命令行中删除 Maven Wrapper?

来自分类常见问题

如何在CentOS命令行中搜索文件

来自分类Dev

如何在Windows命令行中运行.py文件?

来自分类Dev

.phar文件如何在命令行中执行

来自分类Dev

如何从Bash中的文件调用几个命令行参数?

Related 相关文章

  1. 1

    在命令行中删除特定文件

  2. 2

    在命令行中删除特定文件

  3. 3

    如何将XML文件内容作为命令行参数传递给Java命令?

  4. 4

    如何将XML文件内容作为命令行参数传递给Java命令?

  5. 5

    如何在命令行中从目录B中的目录A中删除匹配的文件?

  6. 6

    如何使用命令行删除大量的._文件

  7. 7

    如何通过命令行删除特定文件?

  8. 8

    如何使用linux命令行删除文件夹

  9. 9

    如何使用命令行删除Time Machine文件

  10. 10

    删除名称以“?”开头的文件 在命令行中

  11. 11

    如何使用命令行从文件名中删除字符?

  12. 12

    如何使用常见的Linux命令行工具从javascript文件中删除所有注释?

  13. 13

    如何从ruby文件中运行命令行命令?

  14. 14

    文件路径作为命令行参数

  15. 15

    如何从命令行部分打印XML文件?

  16. 16

    如何从命令行解析 XML 文件(对于 GeekTool)?

  17. 17

    如何从Unix命令行在XML文件中添加换行符?

  18. 18

    如何通过命令行在XML文件的标记中添加属性?

  19. 19

    如何使用 XSLT 3.0 从命令行解析 XML 文件中的 XInclude 指令

  20. 20

    节点js中的命令行参数

  21. 21

    如何从此命令行中删除搜索PID?

  22. 22

    在Autohotkey中,如何删除命令行的.java部分?

  23. 23

    如何在命令行中删除Blender?

  24. 24

    如何从命令行删除MacOS中的目录?

  25. 25

    如何从 Ubuntu 命令行中删除 Maven Wrapper?

  26. 26

    如何在CentOS命令行中搜索文件

  27. 27

    如何在Windows命令行中运行.py文件?

  28. 28

    .phar文件如何在命令行中执行

  29. 29

    如何从Bash中的文件调用几个命令行参数?

热门标签

归档