[英]I need help with php parsing of xml for insertion into mysql database
大家好,
對於很多問題,我事先表示歉意,但是有人要求我開發數據庫,並且沒有PHP和MySQL的經驗。 我認為嘗試學習一些有關它們並同時為我的工作開發概念數據庫對我來說是一個很好的練習。 基本上,這是一個數據庫,使用SYDI從我們基於Windows的計算機上獲取WMI信息,以用於補丁程序管理。 我設想此工作的方式是這樣的:
SYDI的XML報告中使用了兩種格式,一種格式在單個標記中具有屬性,另一種格式是單個父標記包含多個具有屬性的子標記。 我已經弄清楚如何解析第一個。 這是數據和代碼示例(這確實是非常基本的東西),並帶有結果輸出:
<machineinfo manufacturer="Dell Inc." productname="Precision M90" identifyingnumber="87ZGFD1" chassis="Portable" />
$xml = simplexml_load_file("sydiTest.xml");
foreach($xml->machineinfo[0]->attributes() as $a => $b)
{
echo $b, "</br>";
}
Dell Inc.
Precision M90
87ZGFD1
Portable
我不需要屬性的名稱,只需要值,所以我只在其中回顯$ b。 第二,這是數據本身以及解析的代碼和輸出的示例:
<patches>
<patch description="Microsoft .NET Framework 1.1 Security Update (KB2416447)" hotfixid="M2416447" installdate="04-Feb-11" />
<patch description="Microsoft .NET Framework 1.1 Service Pack 1 (KB867460)" hotfixid="S867460" installdate="04-Feb-11" />
<patch description="Windows Management Framework Core" hotfixid="KB968930" installdate="2/4/2011" />
<patch description="Security update for MSXML4 SP2 (KB954430)" hotfixid="Q954430" installdate="04-Feb-11" />
<patch description="Security update for MSXML4 SP2 (KB973688)" hotfixid="Q973688" installdate="04-Feb-11" />
<patch description="Microsoft Internationalized Domain Names Mitigation APIs" hotfixid="IDNMitigationAPIs" installdate="6/30/2008" />
</patches>
foreach ($xml->patches->patch[0]->attributes() as $a => $b)
{
echo $b, "</br>";
}
Microsoft .NET Framework 1.1 Security Update (KB2416447)
M2416447
04-Feb-11
如您所見,我只得到了第一個補丁,而沒有得到其余的補丁。 我認為'patch [0]'很可能是問題所在,因為它僅引用第一個子標記。 我怎樣才能參考其余的孩子?
結果提出了另一個問題。 有什么方法可以挑選出特定的屬性,而忽略其余的屬性嗎? 例如,在第一個解析中,machineinfo解析將獲取我需要的所有信息。 在第二個分析中,我只需要描述和hotfixid。 一旦我獲得了正確的語法分析(假設它像第一個一樣運行),我很可能會獲得所有屬性。 我不需要安裝日期。
最后,如何將檢索到的值分配給變量? 第一次解析會生成我需要的數據,但順序不正確。 我的表結構是這樣的:
CREATE TABLE InventoryItems
(InvSerNum VARCHAR(20) NOT NULL,
Make VARCHAR(20),
Model VARCHAR(20),
Platform VARCHAR(12),
CONSTRAINT Inventory_PK PRIMARY KEY (InvSerNum));
我首先需要識別號(InvSerNum)。 當然,我總是可以對表中的字段進行重新排序以匹配XML,但我寧願保留它。 我的想法是,我可以使用INSERT語句,而只需將變量用於要輸入的值。
我正在嘗試自己完成所有這些操作,但是卡在了XML解析部分。 如果有人可以幫助我理解這一過程,那我將承擔您的債務。
嘗試在PHP中使用RapidXML。 easier. 使XML解析容易一些。 它仍然不是那么直觀:您需要一個好的調試器來深入了解它。 其余的問題需要您對PHP中的mysql_(function_name)綁定進行一些研究。 關於這一點的文章很多。
我想出了第二個解析問題。 我使用以下代碼:
foreach ($xml->patches->patch as $patch1) {
foreach ($patch1->attributes() as $a => $b) {
echo $b, "<br />";
}
}
它就像一個魅力! 我仍然需要省略最后一個屬性,將它們分配給變量,使用INSERT語句將它們添加到數據庫中,但是至少我離分辨率更近了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.