天道酬勤,学无止境

XmlStarlet 可以在复制期间保留 CDATA 吗?(Can XmlStarlet preserve CDATA during copy?)

问题
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="20.01" > <Controller Use="Target" Name="SOME_TARGET_NAME" ProcessorType="1789-L60"> <Tags> <Tag Name="gstrScrap" TagType="Base" DataType="STRING" Constant="false" ExternalAccess="Read/Write"> <Data>05 00 00 00 53 43 52 41 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</Data> <Data Format="String" Length="5"> <![CDATA['SCRAP']]> </Data> </Tag> </Tags> </Controller> </RSLogix5000Content> xml sel -t -c "RSLogix5000Content/Controller/Tags/Tag" Example.xml <Tag Name="gstrScrap" TagType="Base" DataType="STRING" Constant="false" ExternalAccess="Read/Write"> <Data>05 00 00 00 53 43 52 41 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</Data> <Data Format="String" Length="5"> 'SCRAP' </Data> </Tag>
回答1
xml sel -t -c "RSLogix5000Content/Controller/Tags/Tag" Example.xml >t1.xml xml ed -i "/Tag/Data/text()" -t text -n "" -v "<![CDATA[" t1.xml >t2.xml xml ed -a "/Tag/Data/text()" -t text -n "" -v "]]>" t2.xml >t3.xml sed -r "s/&lt;!\[CDATA\[/<![CDATA[/g; s/\]\]&gt;/]]>/g" t3.xml >t4.xml xml sel -t -c "RSLogix5000Content/Controller/Tags/Tag" Example.xml >t1.xml xml ed -i "/Tag/Data/text()" -t text -n "" -v "<![CDATA[" t1.xml >t2.xml xml ed -a "/Tag/Data/text()" -t text -n "" -v "]]>" t2.xml >t3.xml xml unesc <t3.xml >t4.xml

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Can XmlStarlet preserve CDATA during copy?
    How can I make XmlStarlet preserve CDATA when using copy? The <![CDATA[ ]]> must be maintained because the application that generated (and uses) the data insists on having the CDATA directive around certain data. Example.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="20.01" > <Controller Use="Target" Name="SOME_TARGET_NAME" ProcessorType="1789-L60"> <Tags> <Tag Name="gstrScrap" TagType="Base" DataType="STRING" Constant="false" ExternalAccess="Read/Write"> <Data>05 00 00 00 53 43 52 41 50 00 00 00 00 00 00 00 00 00 00 00 00
  • XMLStarlet 不打印整行(XMLStarlet does not print full line)
    问题 我的批次有问题。 XMLStarlet 没有显示完整的行。 但是,我只使用3DS下面的批处理文件,其余的行没有显示。 输出应该只是 XML 文件中包含3DS 的第一个title标签行的版本信息,例如9.4.0-21没有3DS 。 我会很高兴得到任何答案。 我的批处理文件: @echo off cls echo. echo. echo ----------- Nintendo 3DS Firmware Checker -------------------------------------- echo --------------------- A CMD based Tool ----------------------------------------- echo. echo. echo. httpget http://yls8.mtheall.com/ninupdates/feed.php nintendo3dsupdate.xml for /f %%i in ('XML.EXE sel -t -v "//channel/item/title" "nintendo3dsupdate.xml"') do set "var111=%%i" >nul echo. echo. echo "%var111%" is the currently 3ds firmware
  • 为什么这个 XPath 表达式在 xmlstarlet 中没有返回正确的值?(Why does this XPath expression not return the correct value in xmlstarlet?)
    问题 我正在尝试使用 xmlstarlet 提取此 KML 文件中“坐标”节点的内容。 KML 文件使用 xmlstarlet 本身可以很好地验证。 我将其精简为一个包含以下内容的小测试文件: <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <Placemark> <name>eurovelo-5 690</name> <Snippet></Snippet> <description><![CDATA[ ]]></description> <styleUrl>#style390</styleUrl> <LineString> <tessellate>1</tessellate> <coordinates> 10.146948,44.790592,97.500000 10.146958,44.790562,97.599998 10.147018,44.790497,97.699997 10.147083,44.790466,97.699997 </coordinates> </LineString> </Placemark> </Document> </kml> 但运行此查询失败: xmlstarlet sel -t -c "/
  • 是否可以使用 xmlstarlet 或其他 bash 工具在 xml 文件中注释/取消注释标签(Is it possible to comment/uncomment tags inside an xml file using xmlstarlet or other bash tools)
    问题 我如何使用 xmlstarlet 或任何其他 shell 脚本库/工具等以编程方式注释/取消注释 xml 文件中的标记块。 正在评论... 输入文件: <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> 输出文件: <note> <to>Tove</to> <!-- <from>Jani</from> --> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> 取消注释... 输入文件: <note> <to>Tove</to> <!-- <from>Jani</from> --> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> 输出文件: <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> 回答1
  • XMLStarlet 和 RSS(XMLStarlet and RSS)
    问题 我似乎无法通过 xmlstarlet 获得这个基本的 xslt 查询。 我确定我遗漏了一些明显的东西,但是对于我的生活,我无法弄清楚这种语法,所以请有人照亮我。 XML Starlet 命令: xml sel -t -m "//rdf:RDF/item" -v link -v description -v link ./sss.rdf sss.rdf: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:ev="http://purl.org/rss/1.0/modules/event/" xmlns:syn="http://purl.org/rss/1.0/modules
  • xmlstarlet:过滤掉具有属性的元素(xmlstarlet: filter out element with attribute)
    问题 如何过滤掉某些类型的元素,这些元素没有具有魔法值的属性并保留文档的其余部分? 所有这些都使用xmlstarlet吗? 我必须做的是: cat << EOF > database.xml <?xml version="1.0"?> <database> <some name="A" /> <some name="B" /> <some name="C" /> <text>this is some text to be applied...</text> <project> <test deeper="structure"/> </project> </database> EOF 和 xmlstarlet sel -t -m "*" -c "*[not(self::some[@name != 'A'])]" database.xml 产量 <some name="A"/><text>this is some text to be applied...</text><project> <test deeper="structure"/> </project> 但这隐藏了我宝贵的<database> tag 。 除了indentation ,这不是问题......并且当<some>不是<database>的直接后代时不起作用,例如<project>孩子。 我想要得到的是数据库,但所有
  • 从多个xml文件中提取节点(Extracting Nodes from multiple xml files)
    问题 我有三个类似结构的 xml 文件,我想使用 xpath-expression 来提取这些文件中的所有匹配节点并将它们写入第三个。 你知道处理这个问题的好工具吗? 我在想类似的事情 $supermagicxpathtool -x "//whoopdee" file1.xml file2.xml file3.xml > resultfile.xml 回答1 xmlstarlet 可以提取节点,但我不确定它是否可以加入这样的结果。 回答2 XPath 只能选择节点,不能写入文件。 在 XPath 1.0 中,在属于多个 XML 文档的单个表达式节点中没有引用的标准方法。 如果托管 XPath 的编程语言是 XSLT,那么三个 XML 文档的文档节点可以位于三个单独的xsl:variable s 中: $doc1 、 $doc2和$doc3 。 $doc1//whoopdee | $doc2//whoopdee | $doc3//whoopdee 或者,可以直接使用 XSLT document()函数: document('file1.xml')//whoopdee | document('file2.xml')//whoopdee | document('file3.xml')//whoopdee 要输出上述任一 XPath 表达式的结果,使用 XSLT 只需编写: <xsl
  • XMLStarlet does not print full line
    I have a problem with my batch. XMLStarlet does not show me the complete line. However, I get with the batch file below only 3DS and the rest of the line is not shown. Output should be only the version information from first title tag line containing 3DS in XML file, e.g. 9.4.0-21 without 3DS. I would be very glad about any answer. My batch file: @echo off cls echo. echo. echo ----------- Nintendo 3DS Firmware Checker -------------------------------------- echo --------------------- A CMD based Tool ----------------------------------------- echo. echo. echo. httpget http://yls8.mtheall.com
  • 格式 xml,漂亮的打印(format xml, pretty print)
    问题 我知道两种“漂亮打印”或格式化 xml 的方法: 外壳工具使用通用标识样式表和 Xalan 破解 38 Pretty-Print XML 还有哪些其他免费(如啤酒)格式化程序? (除了使用javascript) 回答1 好吧,您链接到的身份转换可移植到任何 XSLT 处理器(Saxon、msxml 等)。 此外,您可以查看xmllint ,它是 LibXML2 工具包的一部分。 --format选项允许您漂亮地打印输入。 类似的功能存在于 XMLStarlet(它在 iirc 下使用 LibXML2)。 回答2 xmlstarlet fo是我用来打印漂亮的东西。 Xmlstarlet 有许多选项: $ xmlstarlet fo --help XMLStarlet Toolkit: Format XML document Usage: xml fo [<options>] <xml-file> where <options> are -n or --noindent - do not indent -t or --indent-tab - indent output with tabulation -s or --indent-spaces <num> - indent output with <num> spaces -o or --omit-decl - omit xml
  • XMLStarlet and RSS
    I can't seem to get this basic xslt query working via xmlstarlet. I'm sure I'm missing something obvious, but for the life of me I cannot figure out this syntax, so someone please illuminate me. XML Starlet Command: xml sel -t -m "//rdf:RDF/item" -v link -v description -v link ./sss.rdf sss.rdf: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl
  • 使用xmlstarlet提取和转储元素(Extracting and dumping elements using xmlstarlet)
    问题 我正在寻找一种使用xmlstarlet从我的xml中提取和打印元素的方法; 例如,如果我的xml是 <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore> 我想将价格= 29.99的图书元素打印为: <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> 我了解xpath查询以选择这样的元素(/bookstore/book[price=29.99]),但是我无法在stdout上打印/转储它。 如果我使用'-v'选项并使用-v(。),则不会获得所需的输出(带有所有标签),而只是获得文本值。 应该有一种方法可以简单地按原样转储所选元素,这就是我想要的。 谢谢您的期待。 回答1 使用“ -c”(复制)选项,应达到的目标: xmlstarlet sel -t -c "/bookstore/book[price=29
  • Why does this XPath expression not return the correct value in xmlstarlet?
    I'm trying to extract the contents of the 'coordinates' node in this KML file using xmlstarlet. The KML file validates fine using xmlstarlet itself. I've whittled it down to a small test file containing: <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <Placemark> <name>eurovelo-5 690</name> <Snippet></Snippet> <description><![CDATA[ ]]></description> <styleUrl>#style390</styleUrl> <LineString> <tessellate>1</tessellate> <coordinates> 10.146948,44.790592,97.500000 10.146958,44.790562,97.599998 10.147018,44.790497,97.699997 10.147083,44.790466,97
  • 使用 xmlstarlet 在 XML 文件中的条件(Conditionals in XML file using xmlstarlet)
    问题 考虑到此处和此处的代码,我已更改它们以解释我的问题。 现在代码如下所示: <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book category="COOKING"> <Description> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <stock>YES</stock> </Description> <Location> <restock>UMG</restock> <shelf>30</shelf> </Location> </book> <book category="CHILDREN"> <Description> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <stock>NO</stock> </Description> <Location> <restock>GIP</restock> <shelf>20</shelf> </Location> </book> <book category="CHILDREN">
  • XMLStarlet - UTF-8 北欧字符(XMLStarlet - UTF-8 Nordic characters)
    问题 使用 XMLStarlet (windows) 编辑 RSS 提要,但在使用挪威语字符“ÆØÅ”时遇到了一些问题。 我正在使用我在此站点上找到的示例(https://stackoverflow.com/a/14397390/3168446) 这是我的 feed.xml。 (记事本++说它是用UTF-8编码的) <?xml version="1.0" encoding="utf-8"?> <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> <channel> <title>My RSS Feed</title> <description>This is my RSS Feed</description> </channel> </rss> 我没有使用以下示例,因为它用于 linux 脚本,但是我下面的长命令行执行相同的操作.. #!/bin/sh TITLE="Test title ÆØÅ" LINK="http://www.example.com" DATE="`Sat, 26 Jul 2014 01:14:30 +0200`" xmlstarlet ed -L -a "//channel" -t elem -n item -v "" \ -s "//item[1]" -t elem -n title -v
  • 如何使用 XmlStarlet 将具有属性的元素插入 XML 文件?(How to insert elements with attributes to an XML file using XmlStarlet?)
    问题 源 XML <xml> <block> <el name="a">92346</el> <el name="b">lorem</el> </block> <block> <el name="a">89753</el> <el name="b">ipsum</el> </block> </xml> 目的 我想使用 Linux shell 脚本在每个<block>插入一个<el name="c">0</el>元素: <xml> <block> <el name="a">92346</el> <el name="b">lorem</el> <el name="c">0</el> </block> <block> <el name="a">89753</el> <el name="b">ipsum</el> <el name="c">0</el> </block> </xml> 我可以使用 XmlStarlet 附加元素: xmlstarlet ed -a '/xml/block/el[@name="b"]' \ --type 'elem' -n 'el' -v 0 问题 选择每个没有name属性的<el>元素的 XPath 表达式是什么? 我可以使用单个 xml ed 命令附加元素并插入属性吗? 回答1 答案 /xml/block/el[not(@name)]如另一个答案所述:
  • 如何改进到 mongodb 的 XML 导入?(How to improve a XML import into mongodb?)
    问题 我有一些大型 XML 文件(每个 5GB),我将它们导入到 mongodb 数据库中。 我正在使用 Expat 来解析文档,进行一些数据操作(删除一些字段、单位转换等),然后插入到数据库中。 我的脚本基于这个:https://github.com/bgianfo/stackoverflow-mongodb/blob/master/so-import 我的问题是:有没有办法通过批量插入来改进这一点? 在插入之前将这些文档存储在一个数组上是个好主意吗? 那么在插入之前我应该​​存储多少个文档? 将 jsons 写入文件然后使用 mongoimport 会更快吗? 我很感激任何建议。 回答1 在插入之前将这些文档存储在一个数组上是个好主意吗? 是的,这很有可能。 它减少了到数据库的往返次数。 您应该监视您的系统,由于 IO 等待(即开销和线程同步花费的时间比实际数据传输多得多),它在插入时可能会空闲很多。 那么在插入之前我应该​​存储多少个文档? 这很难说,因为这取决于很多因素。 经验法则:1,000 - 10,000。 你将不得不做一些实验。 在旧版本的 mongodb 中,整个批次不得大于 16MB 的文档大小限制。 将 jsons 写入文件然后使用 mongoimport 会更快吗? 不,除非您的代码有缺陷。 这意味着您必须复制数据两次,并且整个操作应该是 IO 绑定的。
  • 使用 xmlstarlet 将 XML 从一个文件插入另一个文件?(Insert XML from one file into another with xmlstarlet?)
    问题 有没有办法使用 xmlstarlet 将 XML 从一个文件插入另一个文件,或者我是否坚持将一堆 -s 命令串在一起? 我有一个相当大的块要插入。 我最好用那个块写一些 xsl 吗? 回答1 我最好写一些包含该块的 xsl 吗? 我认为您最好使用 XSL; document() 函数允许您从另一个文件中获取 XML。 xmlstarlet 的 ed 子命令无权访问 document() 并且它缺乏访问其他文件的方法。
  • How do I select and edit an xml node with xmlstartlet?
    Here I'm selecting the node: $ xmlstarlet sel -t -c "/configuration/property[name='http.agent.name']"/value conf/nutch-default.xml <value/> This doesn't edit it: $ xmlstarlet edit "/configuration/property[name='http.agent.name']"/value -v 'test' conf/nutch-default.xml I/O warning : failed to load external entity "/configuration/property[name='http.agent.name']/value" What would be an xmlstartlet command that does change the change? AFAIK -x is not supported in xmlstartlet yet. I'm working on conf/nutch-default.xml $ xmlstarlet ed --help XMLStarlet Toolkit: Edit XML document(s) Usage: xml ed
  • XMLStarlet 用表达式更新节点(XMLStarlet updating node with the expression)
    问题 我正在为 xmlstarlet 的更新功能而苦苦挣扎。 我正在尝试使用另一个值更新 xml 节点值。 在我的FVALUE我尝试使用以下命令将FVALUE字段值复制到QUANTITY字段: xml ed -u "INVOICE_ITEM_LIST/INVOICE_ITEM/QUANTITY" -x "INVOICE_ITEM_LIST/INVOICE_ITEM/PRODUCT_FEATURES/FEATURE/FVALUE" 使用-v "value"选项效果很好,但使用-x "xpath"参数不起作用。 我做错了什么? <INVOICE_ITEM_LIST> <INVOICE_ITEM> <PRODUCT_NAME>Product1</PRODUCT_NAME> <PRODUCT_FEATURES> <FEATURE> <FNAME>TotalQuantity</FNAME> <FVALUE>6.500</FVALUE> </FEATURE> </PRODUCT_FEATURES> <QUANTITY></QUANTITY> </INVOICE_ITEM> <INVOICE_ITEM> <PRODUCT_NAME>Product2</PRODUCT_NAME> <PRODUCT_FEATURES> <FEATURE> <FNAME>TotalQuantity</FNAME>
  • 如何解析无效(格式错误/格式错误)的XML?(How to parse invalid (bad / not well-formed) XML?)
    问题 当前,我正在开发一项功能,该功能涉及解析从另一产品收到的XML。 我决定对一些实际的客户数据进行一些测试,看起来其他产品正在允许来自用户的输入被认为是无效的。 无论如何,我仍然必须尝试找出一种解析它的方法。 我们正在使用javax.xml.parsers.DocumentBuilder并且在输入中出现如下错误。 <xml> ... <description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description> ... </xml> 如您所知,说明中包含似乎无效的标记( <THIS-IS-PART-OF-DESCRIPTION> )。 现在,此描述标签被称为是叶子标签,并且其中不应包含任何嵌套标签。 无论如何,这仍然是一个问题,并在DocumentBuilder.parse(...)上产生异常 我知道这是无效的XML,但是可以预见的是无效的。 关于解析此类输入的方法有什么想法吗? 回答1 “ XML”比无效更糟糕–它的格式不正确; 请参阅格式正确与有效XML 。 对违法行为的可预测性进行非正式评估无济于事。 该文本数据不是XML。 没有一致的XML工具或库可以帮助您进行处理。 选项,最可取的是: 让提供者最终解决问题。 要求格式正确的XML。 (从技术上来说,格式良好的XML短语是多余的,但可能有助于强调