如何从<?xml-stylesheet>节点中获取href属性值?

AJ.*_*AJ. 9 c# xml xslt

我们从供应商处获取XML文档,我们需要使用它们的样式表执行XSL转换,以便我们可以将生成的HTML转换为PDF.实际样式表在XML文档中定义的href属性中引用?xml-stylesheet.有什么方法可以使用C#获取该URL吗?我不相信供应商不更改URL,显然不想对其进行硬编码.

带有完整?xml-stylesheet元素的XML文件的开头如下所示:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.fakeurl.com/StyleSheet.xsl"?>
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 3

Linq 到 xml 代码:

XDocument xDoc = ...;

var cssUrlQuery = from node in xDoc.Nodes()
        where node.NodeType == XmlNodeType.ProcessingInstruction
        select Regex.Match(((XProcessingInstruction)node).Data, "href=\"(?<url>.*?)\"").Groups["url"].Value;
Run Code Online (Sandbox Code Playgroud)

或 linq 到对象

var cssUrls = (from XmlNode childNode in doc.ChildNodes
                   where childNode.NodeType == XmlNodeType.ProcessingInstruction && childNode.Name == "xml-stylesheet"
                   select (XmlProcessingInstruction) childNode
                   into procNode select Regex.Match(procNode.Data, "href=\"(?<url>.*?)\"").Groups["url"].Value).ToList();
Run Code Online (Sandbox Code Playgroud)

xDoc.XPathSelectElement() 将不起作用,因为由于某种原因它无法将 XElement 转换为 XProcessingInstruction。