【发布时间】:2023-03-07 13:47:01
【问题描述】:
我正在尝试从 .svg 文件中获取一个节点,该文件包含一些 xml 格式的信息。 这是我的代码:
XmlDocument document = new XmlDocument();
document.Load(openFileDialog.FileName);
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(document.NameTable);
xmlnsManager.AddNamespace("inkscape", "http://www.inkscape.org/namespaces/inkscape");
xmlnsManager.AddNamespace("sodipodi", "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd");
xmlnsManager.AddNamespace("xlink", "http://www.w3.org/1999/xlink");
xmlnsManager.AddNamespace("svg", "http://www.w3.org/2000/svg");
XmlNode node = document.DocumentElement.SelectSingleNode("sodipodi:namedview/g/image]", xmlnsManager);
根据微软的文档,我也试过了:
descendant::sodipodi:namedview[sodipodi:g/sodipodi:image]
我还尝试了在 g/ 和 image 之前使用和不使用“sodipodo”的两个版本。 如果我只写“sodipodi:namedview”,它会找到节点并返回它,但我更愿意直接找到我需要的那个,而不是遍历它。 这是 xml 文件的简短版本:
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg5"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
sodipodi:docname="Zeichnung.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.46324355"
inkscape:cx="616.30648"
inkscape:cy="601.19564"
inkscape:window-width="1366"
inkscape:window-height="705"
inkscape:window-x="1912"
inkscape:window-y="101"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<rect
x="69.078134"
y="554.78377"
width="613.06844"
height="252.56693"
id="rect1536" />
</defs>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<image
width="209.62195"
height="110.57917"
preserveAspectRatio="none"
style="image-rendering:optimizeSpeed"
xlink:href="Really long base64 string"
id="image47"
x="-2.8600111"
y="-0.1732364" />
</g>
</svg>
【问题讨论】:
-
据我所知,该图像不包含在 namedview 元素中,即没有子元素的元素。在 Visual Studio 中,输入您的简短 xml 版本,然后将 XPath 复制到图像,我得到
/svg:svg/svg:g/svg:image。我错过了什么吗? -
@cph 不,你是对的,这解决了它,我只是瞎了,不知何故长达数小时