我正在尝试修改 xml 文件中 FromModifiedDate 行的日期 我首先想显示更改之前的日期,但我不知道如何遍历此 xml 文件以获取 FromModifiedDate for next 循环中的 console.writeline 永远不会被命中
这是我到目前为止的代码
Dim document1 As XDocument = XDocument.Load("C:\QuickBooks Shared\SDKTestPlus3\BillQuery.xml")
' For Each ModifiedDateRangeFilter In From element In document1.<QBXML>.<QBXMLMsgsRq>.<BillQueryRq>.<ModifiedDateRangeFilter>
'ModifiedDateRangeFilter.<FromModifiedDate>.value = "2021-01-01"
' Next
For Each daterange As XElement In document1.Descendants("ModifiedDateRangeFilter")
Console.WriteLine(daterange.Elements("FromModifiedDate"))
Next
Console.WriteLine(document1.Root.Element("QBXMLMsgsRq").<BillQueryRq>.Value)
'.Elements("ModifiedDateRangeFilter").Elements("FromModifiedDate")
第二个写入行输出 2021-01-012023-12-311TxnIDTimeCreatedTimeModifiedVendorRefVendorAddressAPAccountRefTxnDateDueDateAmountDueIsPendingTermsRefIsPaidOpenAmount
这是我的 XML 文件
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="16.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<BillQueryRq>
<ModifiedDateRangeFilter> <!-- optional -->
<FromModifiedDate>2021-01-01</FromModifiedDate> <!-- optional -->
<ToModifiedDate>2023-12-31</ToModifiedDate> <!-- optional -->
</ModifiedDateRangeFilter>
<IncludeLineItems >1</IncludeLineItems> <!-- optional -->
<IncludeRetElement >TxnID</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >TimeCreated</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >TimeModified</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >VendorRef</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >VendorAddress</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >APAccountRef</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >TxnDate</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >DueDate</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >AmountDue</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >IsPending</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >TermsRef</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >IsPaid</IncludeRetElement> <!-- optional, may repeat -->
<IncludeRetElement >OpenAmount</IncludeRetElement> <!-- optional, may repeat -->
</BillQueryRq>
</QBXMLMsgsRq>
</QBXML>
请尝试以下利用 LINQ to XML API 功能的解决方案。
无需任何循环。
c#
void Main()
{
const string FILENAME = @"e:\Temp\BillQuery.xml";
string FromModifiedDate_New = "2024-05-16";
XDocument xdoc = XDocument.Load(FILENAME);
var FromModifiedDate = xdoc.Descendants("FromModifiedDate")?.SingleOrDefault().Value;
if (!string.IsNullOrEmpty(FromModifiedDate))
{
// just to see original value
Console.WriteLine(FromModifiedDate);
// modify value
XElement xelem = xdoc.Descendants("FromModifiedDate").SingleOrDefault();
xelem.SetValue(FromModifiedDate_New);
}
}
输出
2021-01-01
<?qbxml version="16.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<BillQueryRq>
<ModifiedDateRangeFilter>
<!-- optional -->
<FromModifiedDate>2024-05-16</FromModifiedDate>
<!-- optional -->
<ToModifiedDate>2023-12-31</ToModifiedDate>
<!-- optional -->
</ModifiedDateRangeFilter>
<IncludeLineItems>1</IncludeLineItems>
<!-- optional -->
<IncludeRetElement>TxnID</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>TimeCreated</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>TimeModified</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>VendorRef</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>VendorAddress</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>APAccountRef</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>TxnDate</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>DueDate</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>AmountDue</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>IsPending</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>TermsRef</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>IsPaid</IncludeRetElement>
<!-- optional, may repeat -->
<IncludeRetElement>OpenAmount</IncludeRetElement>
<!-- optional, may repeat -->
</BillQueryRq>
</QBXMLMsgsRq>
</QBXML>