通过Linq C#通过Xdocument更新XML

发布于 2025-01-25 21:55:49 字数 8848 浏览 1 评论 0原文

我正在使用C#中的Xdocument来操纵以下XML文档的更精细版本。我正在尝试检查每个部分的“零件”元素值是否为99999。如果值为99999,我想将整个零件元素交换为我存储在字符串变量中的新零件元素。

<statement>   
    <header>
        <created>5/3/2022</created>        
        <charges>100.00</charges>        
        <description>some text</description>
        <billing-party>
            <name>3304</name>
            <address>1703</address>
            <phone />
        </billing-party>      
    </header>    
    <invoices>
        <invoice>
            <invoice-no>39D5</invoice-no>
            <line-items>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>2</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>               
            </line-items>
        </invoice>
        <invoice>
            <invoice-no>39D5</invoice-no>
            <line-items>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>2</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>99999</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>               
            </line-items>
        </invoice>
    </invoices>
</statement>

使用LINQ,在不创建新的Xdocument的情况下执行此操作的最佳方法是什么?

我尝试了这一点,但是我是Linq的新手,并且不太了解如何在不使用FirstOrdOdefault()的情况下实现这一目标。

statementFile.ReplaceNodes(

                from invoice in statementFile.Descendants("invoices")
                from lineItem in invoice.Descendants("line-items")
                from part in lineItem.Descendants("parts")
                where part.Element("part-no").Value.Equals("99999")
                select part.ReplaceWith(updatedPart));    
                );

I'm using XDocument in C# to manipulate a more elaborate version of the below XML document. I'm trying to check if the 'part-no' element value is 99999 for each part. If the value is 99999, I want to swap out the entire part element for a new part element I have stored in string variable.

<statement>   
    <header>
        <created>5/3/2022</created>        
        <charges>100.00</charges>        
        <description>some text</description>
        <billing-party>
            <name>3304</name>
            <address>1703</address>
            <phone />
        </billing-party>      
    </header>    
    <invoices>
        <invoice>
            <invoice-no>39D5</invoice-no>
            <line-items>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>2</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>               
            </line-items>
        </invoice>
        <invoice>
            <invoice-no>39D5</invoice-no>
            <line-items>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>2</line-no>                    
                    <parts>
                        <part>
                            <part-no>990303</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>
                <line-item>
                    <line-no>1</line-no>                    
                    <parts>
                        <part>
                            <part-no>99999</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                        <part>
                            <part-no>890304</part-no>
                            <description>
                               some description
                            </description>
                            <tax />
                            <value>270.50</value>
                            <quantity />                            
                        </part>
                    </parts>                    
                    <part-number>139186</part-number>
                </line-item>               
            </line-items>
        </invoice>
    </invoices>
</statement>

Using linq, what is the best way to do this without creating a new XDocument?

I tried this but I'm new to linq and don't quite understand how to achieve this without using FirstOrDefault().

statementFile.ReplaceNodes(

                from invoice in statementFile.Descendants("invoices")
                from lineItem in invoice.Descendants("line-items")
                from part in lineItem.Descendants("parts")
                where part.Element("part-no").Value.Equals("99999")
                select part.ReplaceWith(updatedPart));    
                );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文