2014-06-17 6 views
0

나는 다음을 통해 파고 있습니다 : https://saxonica.plan.io/boards/3/topics/1468, http://saxon-xslt-and-xquery-processor.13853.n7.nabble.com/C-How-to-get-original-Node-from-XdmNode-td5511.html,하지만 내 머리를 감쌀 수는 없습니다.XmlNode로 XdmNode 변환

Saxon-HE 9.5.1.5 NuGet 패키지를 설치했으며 XmlDocument와 함께 XPath 2.0 기능을 연결하려고합니다.

은 내가 읽은 것에 나는 현재 기준으로 설정 한 코드입니다 :

using Saxon.Api; 
using System; 
using System.Xml; 

namespace MainTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SaxonFromXMLDoc(); 
     } 

     private static void SaxonFromXMLDoc() 
     { 
      string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 
      path += System.IO.Path.DirectorySeparatorChar; 

      // Create an XML document. 
      XmlDocument xmldocument = new XmlDocument(); 
      xmldocument.Load(path + "test.html"); 

      // Create a Saxon processor. 
      Processor sxp = new Processor(); 

      // Load the source document. 
      XdmNode document = sxp.NewDocumentBuilder().Wrap(xmldocument); 

      // XPath. 
      XPathCompiler xpath = sxp.NewXPathCompiler(); 
      xpath.Caching = true; 

      // Query for items. 
      foreach (XdmNode item in xpath.Evaluate("descendant-or-self::*/attribute::*[matches(name(), \"^dx\")]", document)) 
      { 
       // Get an XmlNode for manipulation. 
       XmlNode xmlnode = (XmlNode)((VirtualNode)item.Unwrap()).getUnderlyingNode(); 

       Console.WriteLine(xmlnode.OuterXml); 
      } 

      Console.ReadKey(); 
     } 
    } 
} 

음, 예상대로이이 오류가 발생합니다 (I 그 클래스에 대한 사용 지침이 없다) :

#1: The type 'net.sf.saxon.om.Sequence' is defined in an assembly that is not referenced. You must add a reference to assembly 'saxon9he, Version=9.5.1.5, Culture=neutral, PublicKeyToken=e1fdd002d5083fe6'. 
#2: The type or namespace name 'VirtualNode' could not be found (are you missing a using directive or an assembly reference?) 

나는 using net.sf.saxon.om.Sequence 또는 그 밖의 것에 대해서는 언급 할 수없는 것 같습니다.

이 작업을하려면 어떻게해야합니까?

답변

1

saxon9api.dll 대신 saxon9he.dll에 정의 된 VirtualNode 또는 Sequence와 같은 클래스를 사용하려는 경우 using 지시문을 추가하고이 DLL에 대한 종속성을 프로젝트에 추가해야합니다.

이 클래스에 대한 설명은 Java 설명서를 참조하십시오. 이 DLL은 Saxon-HE/J 제품과 동일한 Java 소스 코드로 작성되므로 Javadoc 설명서가 모두 적용 가능합니다. boolean/string/int와 같은 기본 유형의 매핑을 이해해야하지만 상당히 명확합니다. Visual Studio의 개체 브라우저는 이러한 클래스/메도의 서명을 .NET 용어로 표시합니다.

저는 Saxon이 XdmNode에서 바로 그러한 클래스를 사용하지 않고 기본 XmlNode로 들어가는 방법을 제공 할 것이라고 기대했지만 문서는 존재하지 않는 것으로 보입니다. 그것은 감독 인 것처럼 보이고 우리가 그것을 추가 할 수 있는지 알게 될 것입니다.