2010-06-28 2 views
0

디버깅하는 동안 새로 만든 요소의 접두사는 w :이지만 끝 부분의 Xmldoc에서는 잃게됩니다.Open XML - 내 접두사는 어디에 있습니까?

아래의 요소에 대한 결과 InnerXML은 다음과 같습니다 <altChunk id="FF_HTML" xmlns="http://schemas.openxmlformats.org/wordprocessingml/2006/main" />

예상 결과는 접두사 네임 스페이스 만의 별칭입니다 <w:altChunk r:id="FF_HTML"/>

private static XmlDocument prepareHTMLChunks(PackagePart partDocumentXML) 
{ 
    XmlDocument doc = new XmlDocument(); 
    Stream xmlStream = partDocumentXML.GetStream(); 
    doc.Load(xmlStream); 

    NameTable nt = new NameTable(); 
    nsManager = new XmlNamespaceManager(nt);    
    nsManager.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); 

    XmlNodeList nodeList = doc.SelectNodes("//w:bookmarkStart", nsManager); 
    foreach (XmlNode node in nodeList) 
    { 
     foreach (XmlAttribute attr in node.Attributes) 
     { 
      if (attr.Value.EndsWith("HTML")) 
      { 
       //XmlElement el = doc.CreateElement("w","w:altChunk",string.Empty); 
       XmlElement el = doc.CreateElement("altChunk",nsManager.LookupNamespace("w")); 


       XmlAttribute altChunkAttr = doc.CreateAttribute("r","id",string.Empty); 
       altChunkAttr.Prefix = "r"; 
       altChunkAttr.Value = attr.Value; 
       el.SetAttributeNode(altChunkAttr); 

       XmlNode nodeToReplace = node.ParentNode;       

       XmlNode bodyNode = doc.SelectSingleNode("//w:body", nsManager); 
       bodyNode.ReplaceChild(el, nodeToReplace);       
      }      
     } 
    }    
    return doc; 
} 
+0

당신은 가서 올바른로 자신의 대답을 받아 들일 수 있습니다. –

답변

0

좋아, 내가 그것을 고정 :

 private static XmlDocument prepareHTMLChunks(PackagePart partDocumentXML) 
    { 

     XmlDocument _document = new XmlDocument(); 
     Stream xmlStream = partDocumentXML.GetStream(); 
     _document.Load(xmlStream); 

     XmlNamespaceManager _ns = new XmlNamespaceManager(_document.NameTable); 
     _ns.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); 

     XmlNode _body = _document.SelectSingleNode("//w:body", _ns); 

     foreach (XmlNode _node in _document.SelectNodes("//w:bookmarkStart", _ns)) 
     { 
      foreach (XmlAttribute _attribute in _node.Attributes) 
      { 
       if (_attribute.Value.EndsWith("HTML")) 
       { 
        XmlElement _element = _document.CreateElement("w", "altChunk", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); 
        XmlAttribute _newAttr = _document.CreateAttribute("r", "id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");       
        _newAttr.Value = _attribute.Value; 
        _element.Attributes.Append(_newAttr); 
        _body.AppendChild(_element);       
       }   
      } 
     }    
     return _document;  
    } 
1

입니다. 접두어 자체는 중요하지 않습니다. 원하는 경우 "접두어"를 접두사로 사용할 수 있으며, 정확히 동일한 것을 의미합니다.

마찬가지로 똑같은 결과는 xmlns = "..."에서 사용자의 질문에 표시 될 수 있습니다. 이것은 "w :"접두사와 똑같은 것을 의미하며, "w"는 동일한 네임 스페이스에 앨리어스 (alias)되었다고 가정합니다.

+0

나는 대답을 듣지 않았지만 답변을 얻지 못했습니다. 이 아닌 경우 : 문제는 접두어를 XML에 넣으면 단어가 상상할 수있는대로 문서를 열지 않습니다. 감사합니다. Fox – Fox

+0

@Fox : 어떤 Word 버전을 사용하고 있으며 접두사없이 열리지 않는 일부 XML을 게시하십시오. 나는 Word가 10 년 이상 동안 자리를 지키고있는 기본 XML 표준을 따르지 않는다는 것을 발견하는 것에 대단히 충격을받을 것입니다. –

+0

모두 접두사가 붙습니다. Word 2007 사용 위의 내 방법은 XML 요소를 으로 렌더링하지만 Word는 을 사용합니다. 그래서 내가 알아 내려고하는 유일한 방법은 위의 메소드에서 얻은 것입니다. 렌더링 할 때 접두사를 XML에 가져 오는 방법입니다. – Fox

관련 문제