[英]Comparing Two XML Elements In OpenXML
我是XML和C#的新手,因此在實現以下內容時遇到了一些麻煩。 希望有人可以指出正確的方向。 因此,我正在使用帶有OpenXML 2.5的C#語言進行開發,並且在創建字體后嘗試檢查Font集合中是否已存在該Font。 如果已經這樣做了,那么我想返回字體的索引。
我一直堅持寫一種比較這些Font對象的有效方法,並且我相信比較它們各自的XML代碼是正確的方法。 我相信這些Font對象是XML代碼的包裝器。 因此,我認為我應該能夠比較兩個XML元素並確定Font是否已經存在。
這有道理嗎? 這是一個例子,因為我擔心我的解釋過於復雜。
1.基本上,我想看看是否:
<x:font>
<x:b />
<x:sz val="18" />
<x:color theme="3" />
<x:name val="Cambria" />
<x:family val="2" />
<x:scheme val="major" />
</x:font>
2.在這里已經存在:
<x:fonts count="18" x14ac:knownFonts="1" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:font>
<x:sz val="11" />
<x:color theme="1" />
<x:name val="Calibri" />
<x:family val="2" />
<x:scheme val="minor" />
</x:font>
<x:font>
<x:sz val="11" />
<x:color theme="1" />
<x:name val="Calibri" />
<x:family val="2" />
<x:scheme val="minor" />
</x:font>
<x:font>
<x:b />
<x:sz val="18" />
<x:color theme="3" />
<x:name val="Cambria" />
<x:family val="2" />
<x:scheme val="major" />
</x:font>
<x:font>
<x:b />
<x:sz val="15" />
<x:color theme="3" />
<x:name val="Calibri" />
<x:family val="2" />
<x:scheme val="minor" />
</x:font>
</x:fonts>
3.然后該方法返回Font的索引。 因此,在此示例中,我的函數將返回2
。
任何幫助,將不勝感激!
謝謝,賈斯汀
簽出XPath以查詢XMLDocuments,然后可以將XMLDocument上的FindNode()與XPath查詢一起使用。
但是,它不會返回索引號。 除非另有指示,否則XML節點不會排序,因此不會說“它是第三個”,因為下次您看它可能是第五個! (可能不是,但是這樣的行為在XML規范之內)。 但是,您可以做的是獲取實際的node(),從中可以獲取包含該節點的parent()節點。
感謝幫助,但實際上從sdk中找到了一種更簡單的方法。 事實證明,每個OpenXml對象都有一個稱為OuterXml
的方法。
根據Microsoft的定義: OuterXml: Gets the markup that represents the current element and all of its child elements.
它比InnerXml: Gets or sets the markup that represents only the child elements of the current element.
更好InnerXml: Gets or sets the markup that represents only the child elements of the current element.
所以我可以簡單地做:
private Stylesheet _stylesheet = _workbookPart.WorkbookStylesPart.Stylesheet;
public int GetFontIndex(Font font)
{
int index = 0;
foreach (var existingFont in _stylesheet.Descendants<Font>())
{
if (font.OuterXml.Equals(existingFont.OuterXml)) return index;
index++;
}
return -1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.