当属性具有'@'时如何在 XSL 中获取值

Posted

技术标签:

【中文标题】当属性具有\'@\'时如何在 XSL 中获取值【英文标题】:How to get value in XSL when attributes have '@'当属性具有'@'时如何在 XSL 中获取值 【发布时间】:2020-10-13 04:24:12 【问题描述】:

如何在下面的XSL文件中获取'maa'类型的<xsl>元素的值?

<xsl:stylesheet version="3.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:eu="http://europa.eu.int" xmlns:xlink="http://www.w3c.org/1999/xlink"> 
   <xsl:template mode="agency"> 
    <xsl:choose>
        <xsl:when test="@code='AT-BASG'">Austria - BASG- Austrian Federal Office for Safety in Health Care / Austrian Medicines and Medical Devices Agency</xsl:when>
     </xsl:choose>
   </xsl:template>
   <xsl:template mode="submission">
    <xsl:choose>
        <xsl:when test="@type='maa'">Marketing Authorisation</xsl:when>
    </xsl:choose>
   </xsl:template>
</xsl:stylesheet>   

我尝试如下:

        string emp = "@type='maa'";
        XmlDocument xslDoc = new XmlDocument();
        xslDoc.Load(IndexFTPLocation);
        //ReadXElement(indexXele, sequenceName, ApplicationName, IndexFTPLocation, 1);
        XmlNamespaceManager nsMgr = new XmlNamespaceManager(xslDoc.NameTable);
        nsMgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
        XmlNode usrNode = xslDoc.SelectSingleNode("/xsl:stylesheet/xsl:template[@mode='submission']/xsl:choose/xsl:when[@test='@type='maa'']", nsMgr);  

但是,当 type="maa" 时,我无法获得“营销授权”。你能帮我解决这个问题吗?

提前致谢!!

编辑: 出现错误:'/xsl:stylesheet/xsl:template[@mode='submission']/xsl:choose/xsl:when[@test='@type='maa'']' 的令牌无效。

【问题讨论】:

请显示minimal reproducible example,包括输入和预期结果。 【参考方案1】:

您可以在xsl:when[@test='@type='maa''] 中使用" 代替',如以下代码:

XmlDocument xslDoc = new XmlDocument();
xslDoc.Load(IndexFTPLocation);

XmlNamespaceManager nsMgr = new XmlNamespaceManager(xslDoc.NameTable);
nsMgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");

XmlNode usrNode = xslDoc.SelectSingleNode("/xsl:stylesheet/xsl:template[@mode='submission']/xsl:choose/xsl:when[@test=\"@type='maa'\"]", nsMgr);
string text = usrNode?.InnerText;

演示

Console.WriteLine(text);

结果

Marketing Authorisation

希望对您有所帮助。

【讨论】:

以上是关于当属性具有'@'时如何在 XSL 中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如果祖先的属性使用 xsl 持有某个值,我如何删除属性和元素

XSL:根据属性计数和匹配创建组

当输入 XML 和转换 XSL 是字符串时,如何使用 XslCompiledTransform。如何将转换结果作为字符串获取?

仅针对 XSL 1.0 中的特定条件列出组内属性的唯一值

当方法包含多个具有多个返回的 if 语句时,如何从方法中获取返回值?

如何获取所有在 tag 属性中具有值的视图?