在#之前删除属性值

时间:2016-09-15 08:14:13

标签: xml xslt

我有许多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中的任何其他内容。

3 个答案:

答案 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");

它做什么?

搜索字符“,然后搜索一些字符,然后搜索#,然后获取下一部分直到另一部分”。