我需要编写一个脚本,可以删除xml文件中的注释块,并将其保存回其目录。
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- =========================================================== -->
<!-- Server Thread Pool -->
<!-- =========================================================== -->
<Set name="ThreadPool">
<!-- Default queued blocking threadpool -->
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Set name="minThreads">10</Set>
<Set name="maxThreads">10000</Set>
<Set name="detailedDump">false</Set>
</New>
</Set>
<!-- =========================================================== -->
<!-- Set connectors -->
<!-- =========================================================== -->
<!--
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><SystemProperty name="jetty.host" /></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>
<Set name="maxIdleTime">50000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">5000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
-->
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.bio.SocketConnector">
<Set name="host"><SystemProperty name="jetty.host" /></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>
<Set name="maxIdleTime">50000</Set>
<Set name="lowResourceMaxIdleTime">1500</Set>
<Set name="statsOn">false</Set>
</New>
</Arg>
</Call>
</Configure>
在这个xml上 我该如何只注释掉这个区块?
<!--
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><SystemProperty name="jetty.host" /></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>
<Set name="maxIdleTime">50000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">5000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
-->
我试过这个但是
require 'nokogiri'
file = File.read("jetty.xml")
xml = Nokogiri::XML(file)
#replace <!-- --> with a space
xml.xpath("//comment()").each do |node|
node.content =node.content.gsub!(/(^\D\W[<!\-\-}]\W[\-\->])/,' ')
end
File.open("newjetty.xml","w") do |f|
f.write xml.to_xml
end
此代码仅删除注释
中的文本输出:
<!---->
<!---->
<!---->
<Set name="ThreadPool">
<!---->
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Set name="minThreads">10</Set>
<Set name="maxThreads">10000</Set>
<Set name="detailedDump">false</Set>
</New>
</Set>
<!---->
<!---->
<!---->
<!---->
<!---->
答案 0 :(得分:0)
您应该删除节点,因为它是注释节点。您可以使用内部文本对其进行解析并重新添加。
require 'nokogiri'
file = File.read("jetty.xml")
xml = Nokogiri::XML(file)
#replace <!-- --> with a space
xml.xpath("//comment()").each do |node|
t = Nokogiri::XML::DocumentFragment.parse(node.content)
node.add_next_sibling(t)
node.remove
end
File.open("newjetty.xml","w") do |f|
f.write xml.to_xml
end
在这里,您要解析评论内容,将其添加为下一个兄弟,并删除节点本身。
这基本上有效,但是只有字符串的内容也会被添加为节点,这使得它成为一个混合内容文档,你肯定不希望它用于jetty配置文件。
因此,还应该包含一些检查节点类型(文本与元素)并且仅包含元素的逻辑。