1

これはxmlコンテンツです。

<w:tbl xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:tr>
      <w:tc>
         <w:p>
           <w:r><w:t>1</w:t></w:r>
         </w:p>
         <w:p /> <!-- needs to remove -->
         <w:p /> <!-- needs to remove -->
       </w:tc>
       <w:tc>
         <w:p>
           <w:r><w:t>2</w:t></w:r>
         </w:p>
         <w:p />  <!-- needs to remove -->
         <w:p />  <!-- needs to remove -->
       </w:tc>
  </w:tr>
  <w:tr>
      <w:tc>
         <w:p>
           <w:r><w:t>3</w:t></w:r>
         </w:p>
         <w:p />  <!-- needs to remove -->
         <w:p />  <!-- needs to remove -->
       </w:tc>
       <w:tc>
         <w:p>
           <w:r><w:t>4</w:t></w:r>
         </w:p>
         <w:p />  <!-- needs to remove -->
         <w:p />  <!-- needs to remove -->
       </w:tc>
  </w:tr>
</w:tbl>

<w:p>実際には、この xml コンテンツは html からooxml<w:tc>へのコンバーター [HtmlToOpenXml.dll]<w:p>によって生成されます。文字列形式の xml コンテンツ。

この問題から抜け出すために私を導いてください...

4

3 に答える 3

6

文字列の置換だけを使用できますか?

xmlString.Replace("<w:p />", "");
于 2012-09-13T05:12:47.617 に答える
1

すべてが簡単な場合は、@sylonによる回答を使用することを強くお勧めします。とにかく、これはLINQtoXMLでこれを行う方法の簡単な例です。

        XElement x = XElement.Load("In.xml");
        string prefix = "w";
        XNamespace w = x.GetNamespaceOfPrefix(prefix);
        var ds = x.Descendants(w + "p")
                  .Where(d => string.IsNullOrEmpty(d.Value));
        ds.Remove();
        x.Save("Out.xml");

より具体的なタグを削除する必要がある場合は、Where句にさらに具体的な条件を含めることができます。

于 2012-09-13T05:50:13.777 に答える
1
string xmlString = @"<w:tbl xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
      <w:tr>
          <w:tc>
             <w:p>
               <w:r><w:t>1</w:t></w:r>
             </w:p>
             <w:p /> <!-- needs to remove -->
             <w:p /> <!-- needs to remove -->
           </w:tc>
           <w:tc>
             <w:p>
               <w:r><w:t>2</w:t></w:r>
             </w:p>
             <w:p />  <!-- needs to remove -->
             <w:p />  <!-- needs to remove -->
           </w:tc>
      </w:tr>
      <w:tr>
          <w:tc>
             <w:p>
               <w:r><w:t>3</w:t></w:r>
             </w:p>
             <w:p />  <!-- needs to remove -->
             <w:p />  <!-- needs to remove -->
           </w:tc>
           <w:tc>
             <w:p>
               <w:r><w:t>4</w:t></w:r>
             </w:p>
             <w:p />  <!-- needs to remove -->
             <w:p />  <!-- needs to remove -->
           </w:tc>
      </w:tr>
    </w:tbl>";

XDocument doc = XDocument.Parse(xmlString);
doc.Root.Descendants().Where(d => d.IsEmpty && !d.HasAttributes).Remove();
于 2012-09-13T05:53:42.343 に答える