XMLファイル(この投稿の最後にあります)の処理に問題があります。
所有者_Job_Id
_がprobramを実行しているユーザーである特定の_Job_Name
_パターンに関連する_Job_Owner
_データを取得するために、次のコードを作成しました。
_List<String> jobID = new List<String>();
XmlNodeList nodes = xml.SelectNodes("//Job");
foreach (XmlNode node in nodes)
{
innerNode = node.SelectSingleNode("//Job_Owner"); // SelectSingleNode here always selects the same node, but I thought it should be relative to node, not to nodes
if (!innerNode.InnerText.Contains(Environment.UserName))
{
continue;
}
innerNode = node.SelectSingleNode("//Job_Name");
if (!Regex.IsMatch(innerNode.InnerText, jobNamePattern, RegexOptions.Compiled))
{
continue;
}
innerNode = node.SelectSingleNode("//Job_Id");
jobID.Add(innerNode.InnerText);
}
_
node.SelectSingleNode("//Job_Name")
は、node
で表されるxmlコードの下でのみ、_Job_Name
_という名前のタグを探します。
それは常に同じノードを返すので、それが起こっているようではありません、それはforeach
のどのステップでも関係ありません(つまり、node
から選択されたnodes
が変更されますが、常にnode.SelectSingleNode("//Job_Name")
同じコンテンツを返します)。
このコードの何が問題になっていますか?
前もって感謝します!
-
XMLファイルは次のようになります。
_<Data>
<Job>
<Job_Id>58282.minerva</Job_Id>
<Job_Name>sb_net4_L20_sType1</Job_Name>
<Job_Owner>mgirardis@minerva</Job_Owner>
<!--more tags-->
</Job>
<Job>
<!--etc etc etc-->
</Job>
<!--etc etc etc-->
</Data>
_
XPathで「//」構文を使用しているためです。その特定の構文は、その名前のドキュメント内の最初のノードを選択します。 XPath構文の詳細については、 https://www.w3schools.com/xml/xpath_syntax.asp をご覧ください。
子ノードを探している場合は、ノード名(IE: '// Job_Owner'ではなく 'Job_Owner')を使用してみてください。
Infernex87はJob_Owner
は、この場合にシンプルで効果的です。ただし、直接の子ではない場合は、次のことを実行できます。
.//Job_Owner
ディレクトリと同様に、.
は現在のノードであるため、ドキュメントのルートではなく、現在のノードの子孫を検索します。
Infernex87はその理由を明らかにしました。 XMLを使用する場合、LINQルートを使用するのが適切なオプションになると思います。開始したい場合、 Scott Guのブログ は素晴らしいリソースです。
maXboxスクリプトを使用して、大きなDOM/xML/SQLルーチンを作成しました。
function GetXMLFromURLAdr_IsSame_All(apath:string):boolean; var xml、ノード:Olevariant; //IXMLDOMDocument; nodes_row、nodes_se、nodex:olevariant; i、j:Integer; sr1、sr2、basenod、basenod2、filePrefix、mySQL、odbcDSN、Auftrag:string ; begin xml:= CreateOleObject( 'Microsoft.XMLDOM')as IXMLDocument; xml.async:= False; if xml.load(apath)次にwriteln( 'xml path load success2'); if xml.parseError.errorCode <> 0 then writeln( 'XML Load error:' + xml.parseError.reason); basenod:= '/ WAB/Auftragsliste/Auftrag '; nodes_row:= xml.SelectNodes(basenod); writeln(' total auftrag nodes: '+ itoa(nodes_row.length)) try for j:= 0 to nodes_row.length-1 do begin // nodes_se:= nodes_row.item [j] node:= nodes_row.item [j]
// writeln(node.text) sr1:= node.selectSingleNode( '.// Lieferanschrift/Ort')。text sr1:= sr1 + node.selectSingleNode( './/Lieferanschrift/Strasse').text sr2:= node.selectSingleNode(' .// Rechnungsanschrift/Ort ')。text; sr2:= sr2 + node.selectSingleNode(' .//Rechnungsanschrift/Strasse').text; writeln(node.selectSingleNode( '.// Auftragskopf/FremdlieferscheinNr')。text); Auftrag:= node.selectSingleNode( './ /Auftragskopf/FremdlieferscheinNr').text writeln(node.selectSingleNode( '.// Auftragskopf/FremdlieferscheinNr')。text);if ANSICompareText(sr1, sr2) = 0 then begin srlist:= FindAllFiles(PDFFILEPATH,'*'+Auftrag+'_??.pdf',true); for it:= 0 to srlist.count-1 do begin writeln((srlist.strings[it])); if lCopyFile(srlist.strings[it], PDFEXPORT+extractfilename(srlist.strings[it]),true) then writeln('copyof=: '+srlist.strings[it]); end; srlist.free; srlist:= Nil; it:=0; result:= true; end else begin srlist:= FindAllFiles(PDFFILEPATH,'*'+Auftrag+'*.pdf',true); for it:= 0 to srlist.count-1 do begin if lCopyFile(srlist.strings[it], PDFEXPORT+extractfilename(srlist.strings[it]),true) then writeln('copyof<>: '+srlist.strings[it]); end; DeleteFiles(PDFEXPORT, '*RG.pdf'); DeleteFile(PDFEXPORT+'Special_'+Auftrag+'_ES.pdf'); srlist.free; result:= false end; //mk change in op fileprefix:= 'WAB'; odbcDSN:= 'advance_kmu_loc'; if filePrefix='WAB' then begin mySQL:= 'UPDATE verk_auftrag SET Status = 61 where Auftrag = '+Auftrag; writeln('order back: '+ itoa(MySQLQueryExecute2(mysql, odbcDsn, strtoint(Auftrag),true))); end; if filePrefix='WEA' then begin mySQL:= 'UPDATE verk_auftrag SET Status = 52 where Auftrag = '+Auftrag; writeln('order back: '+ itoa(MySQLQueryExecute2(mysql, odbcDsn, strtoint(Auftrag),true))); end; } nodes_se:= node.selectNodes('.//Auftragspositionen/Position'); writeln('total posnod: '+itoa(nodes_se.length)) for i:= 0 to nodes_se.length - 1 do begin node:= nodes_se.item[i]; writeln('Posit=' + node.text); end;//} writeln('------------------------'); end; //} except writeln(exceptiontoString(exceptiontype, exceptionparam)) finally xml:= unassigned; xml:= NULL; end; end;