惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
爱范儿
爱范儿
月光博客
月光博客
The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
T
Tailwind CSS Blog
美团技术团队
D
Docker
V
Visual Studio Blog
Martin Fowler
Martin Fowler
博客园 - 聂微东
The Cloudflare Blog

博客园 - 云起

ArcGISPro SDK Addin打包机制 一次 ArcGISPro Addin项本地化的排查实录 记一次arm机器装系统的经历 记一次vs中无法找到win sdk的问题 arcpy运行时,报错产品许可尚未初始化 Visual Studio 2022生成解决方案代码图报错“无法连接到指定的数据库” win10下定制文件夹 excel中,根据文件名查询文件路径 ArcGISPro SDK 3.1版本中使用QueuedTask的小问题 Compress-Archive压缩zip包的小瑕疵 Pro更新字段别名,重载数据后失效 在多个office文档内替换关键字 git日志分组 更新压缩流 使用excel生成简单的日历 微软中文输入法带来的一点小坑,导致arcgispro输入中文异常 使用C#获取文件详情 Pro更改启动界面 使用AES加密时,结果不一样 命令行程序读取注册表失败的分析 pg_index
xlst处理时命名空间带来的小坑
云起 · 2025-05-13 · via 博客园 - 云起

在处理xml的过程中,之前使用的转换脚本,没有获得预期的结果。
xml的节点结构没有问题,经过对比和排查发现,异常的xml文件中,节点中指定了命名空间。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 模板匹配根节点 -->
    <xsl:template match="/">
        <buttons_with_id>
            <!-- 匹配所有有id属性的button节点 -->
            <xsl:for-each select="//button[@id]">
                <xsl:copy-of select="."/>
            </xsl:for-each>
        </buttons_with_id>
    </xsl:template>
</xsl:stylesheet>
<!-- 正常的 -->
<interface>
    <group>
        <button id="btn1">Button 1</button>
    </group>
    <button>Unnamed Button</button>
    <button id="btn2">Button 2</button>
</interface>
<!-- 带命名空间 -->
<interface xmlns="test">
    <group>
        <button id="btn1">Button 1</button>
    </group>
    <button>Unnamed Button</button>
    <button id="btn2">Button 2</button>
</interface>

之前的xlst没有指定命名空间,会采用默认的空命名空间进行匹配,导致命名空间不一致,从而没有匹配到节点。
所以需要声明并指定命名空间,来进行匹配。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:test="test">
    <!-- 模板匹配根节点 -->
    <xsl:template match="/">
        <buttons_with_id>
            <!-- 匹配所有有id属性的button节点 -->
            <xsl:for-each select="//test:button[@id]">
                <xsl:copy-of select="."/>
            </xsl:for-each>
        </buttons_with_id>
    </xsl:template>
</xsl:stylesheet>

如果需要匹配多个命名空间,可以使用或来适配。

xmlns:test1="test1"
xmlns:test2="test2"
<xsl:for-each select="//test1:button[@id] | //test2:button[@id]">