簡體   English   中英

比較OpenXML中的兩個XML元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM