我有许多xml文件,其中包含如下元素:
<link refID="hdb-tbl-map.dita#topic_x33_ttl_4q">
或
<link refID="#topic_xwd_fbt_4q" format="dita">
我希望#之后的值只能出现在属性值中。
因此生成的xml将具有这样的元素而没有format属性。
<link refID="topic_x33_ttl_4q">
和
<link refID="topic_xwd_fbt_4q">
我只需更改此元素而不更改xml中的任何其他内容。
答案 0 :(得分:1)
因此,您要求使用XSLT解决方案(标记为),请尝试以下方法:
XSLT 1.0 + 2.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:template match="link/@refID">
<xsl:attribute name="{name()}">
<xsl:value-of select="substring-after(.,'#')"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="link/@format"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
结果例如
<link refID="topic_x33_ttl_41"/>
<强>解释强>
第一个模板匹配元素@refID
的属性link
。重新创建具有相同名称{name()}
。
第二个模板与元素@format
的属性link
匹配,不执行任何操作,因此会将其删除。
上一个模板是身份复制模板。从源复制到目标1:1。
答案 1 :(得分:0)
如果你正在使用eclipse:
Ctrl + H -> File search` -> Containing text : # File name patterns : *.xml -> Replace
在输入'with'put“”的新窗口中
答案 2 :(得分:0)
试试这个:(我假设你在java周围并解析这些xml字符串?)
str = str.replaceAll("\".*#(.*)\"", "$1");
它做什么?
搜索字符“,然后搜索一些字符,然后搜索#,然后获取下一部分直到另一部分”。