XML中出错,查找并替换WIN';不固定
我在一个巨大的XML文件中犯了一个巨大的错误XML中出错,查找并替换WIN';不固定,xml,Xml,我在一个巨大的XML文件中犯了一个巨大的错误 <item1> <item2> <item1> //.. tons of stuff... </item1> </item2> </item1> //.. 很多东西。。。 我需要用别的东西替换外面的项目1。但是查找和替换不起作用,因为匹配的内部项1。我尝试过通过多条信息进行搜索,但我找到的每一条查找和替
<item1>
<item2>
<item1>
//.. tons of stuff...
</item1>
</item2>
</item1>
//.. 很多东西。。。
我需要用别的东西替换外面的项目1。但是查找和替换不起作用,因为匹配的内部项1。我尝试过通过多条信息进行搜索,但我找到的每一条查找和替换的单行性质使其不可能,而且所有数据都是选项卡式的
有什么想法吗?你能利用这些标签吗?如果它与您的示例一样规则,那么您可能可以在
\t\t\t
(或您需要使用制表符搜索的任何语法)上搜索并替换为您需要的任何其他内容。您可以利用制表符吗?如果它与您的示例一样规则,则您可能可以在\t\t\t
(或使用制表符搜索所需的任何语法)上搜索并替换为所需的任何其他语法。如果您可以匹配正则表达式,则可以匹配:
<item1>\n[any whitespace]<item2>
\n[任何空白]
并将其更改为:
<item3>\n[any whitespace]<item2>
</item3>\n[any whitespace]</item2>
\n[任何空白]
我也一样
</item1>\n[any whitespace]</item2>
\n[任何空白]
并将其更改为:
<item3>\n[any whitespace]<item2>
</item3>\n[any whitespace]</item2>
\n[任何空白]
我没有指定[any whitespace]表达式,因为我知道它对于不同的编辑器是不同的。如果可以匹配正则表达式,则可以匹配:
<item1>\n[any whitespace]<item2>
\n[任何空白]
并将其更改为:
<item3>\n[any whitespace]<item2>
</item3>\n[any whitespace]</item2>
\n[任何空白]
我也一样
</item1>\n[any whitespace]</item2>
\n[任何空白]
并将其更改为:
<item3>\n[any whitespace]<item2>
</item3>\n[any whitespace]</item2>
\n[任何空白]
我没有指定[any whitespace]表达式,因为我知道它对于不同的编辑器是不同的。使用正则表达式搜索或其他高级搜索/替换方法临时用其他内容替换内部标记(通过指定其前面的制表符)。然后替换剩余的item1标记(现在是外部标记),然后再将临时标记更改回原来的位置。使用正则表达式搜索或其他高级搜索/替换方法将内部标记临时替换为其他标记(通过指定其前面的制表符)。然后替换剩余的item1标记(现在是外部标记),然后再重新更改临时标记。如果XML的格式都是这样,您应该能够使用正则表达式。您也可以尝试格式化程序来获取该格式
否则,您可以使用您熟悉的语言用XML解析器读取XML,在那里更改并将其写回磁盘。如果XML的格式都是这样的,您应该能够使用正则表达式。您也可以尝试格式化程序来获取该格式
否则,您可以使用您熟悉的语言用XML解析器读取XML,在那里更改并将其写回磁盘。可以帮助。可以帮助。正则表达式在这种情况下可能有效,但正则表达式通常不是修改XML的最佳方法 。您应该使用XML工具来解析和操作XML数据,否则可能会在某个时候遇到问题 使用XSLT和特定“item1”元素的模板转换XML是一个更安全、更健壮的解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item1[item2/item1]" >
<!--Replace this literal element "NEW_ITEM_ELEMENT" with whatever name you need to change "item1" elements to: -->
<NEW_ITEM_ELEMENT>
<xsl:apply-templates />
</NEW_ITEM_ELEMENT>
</xsl:template>
</xsl:stylesheet>
正则表达式可能在这种情况下起作用,但正则表达式通常不是修改XML的最佳方法 。您应该使用XML工具来解析和操作XML数据,否则可能会在某个时候遇到问题 使用XSLT和特定“item1”元素的模板转换XML是一个更安全、更健壮的解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item1[item2/item1]" >
<!--Replace this literal element "NEW_ITEM_ELEMENT" with whatever name you need to change "item1" elements to: -->
<NEW_ITEM_ELEMENT>
<xsl:apply-templates />
</NEW_ITEM_ELEMENT>
</xsl:template>
</xsl:stylesheet>
您正在替换内部的,但这是一个想法。另外,它可能使用空格。我正在使用VisualStudio编辑XML。我可以在中执行正则表达式替换吗?按Ctrl+F,然后选中“使用正则表达式”复选框。文本框旁边有箭头,当您按下时,会显示一个包含common VS regex内容的菜单。成功!我用RegexBuddy做了这个替换。它工作得很好。非常感谢。我试过使用Visual Studio。它不需要任何表达式。您正在替换内部表达式,但这是一个想法。另外,它可能使用空格。我正在使用VisualStudio编辑XML。我可以在中执行正则表达式替换吗?按Ctrl+F,然后选中“使用正则表达式”复选框。文本框旁边有箭头,当您按下时,会显示一个包含common VS regex内容的菜单。成功!我用RegexBuddy做了这个替换。它工作得很好。非常感谢。我试过使用Visual Studio。我对正则表达式没有任何经验。我会在什么地方执行这种事情?@Stacey-这取决于你的编辑。VisualStudio可以做到这一点——它是“搜索和替换”对话框上的一个选项,Notepad++也可以。你在用什么编辑器?我对正则表达式没有经验。我会在什么地方执行这种事情?@Stacey-这取决于你的编辑。VisualStudio可以做到这一点——它是“搜索和替换”对话框上的一个选项,Notepad++也可以。你用的是什么编辑器?