2016-04-29 104 views
1
內HTML

是否有可能建立一個XSD,將治療任何標籤的內容,就像文字?我試圖提取標籤的有時包含HTML標籤的內容。沒有固定的HTML格式,並不總是存在。我只想從標籤中提取所有文本。 e.g. <content>this is a new piece of content by <b>Person A</b></content>.我只想提取"this is a new piece of content by <b>Person A</b>",但由SSIS生成的模式自然包含這些標記。當我剛加入簡單的入門創建XSD忽略標籤

<xs:element minOccurs="0" name="content" type="xs:string"></xs:element> 

我收到以下錯誤,並不出人意料。

[XML Source [5]] Error: The XML Source was unable to process the XML data. The element "content" cannot contain a child element. Content model is text only.

回答

1

認爲XSD主要描述爲在有效的XML文檔中描述允許的標記,而不是定義提取的方法。如果更改的content類型xs:string,你宣稱標記不中content,只允許文字,和你得到驗證錯誤反映。

你需要的是選擇字符串值content元素。如果一個XPath上下文不會自動的結果轉換爲一個字符串值,你可以這樣做明確通過string() XPath函數:

string(/path/to/particular/content) 

這將返回所有的孩子的字符串值的串接content,根據要求省略標籤。

更新:重讀你的問題,我看到你實際上要檢索

"this is a new piece of content by <b>Person A</b>" 

(包括b元素,而不是它的字符串值)。在這裏,包裝content元素顯然必須在XSD中描述爲混合內容(mixed="true")。從這種形式的XML文檔中提取這些數據通常需要選擇文本和元素節點的集合,並將這些數據序列化回單個字符串。我對SSIS提供的細節不夠熟悉,但也許我在評論中提到的參考文獻可能會有所幫助。

+0

非常感謝。我按照你的建議嘗試了。 ''<?xml version =「1.0」?> ''This was an error on不支持SSIS選擇器元素 –

+0

您需要了解如何在SSIS中使用XPath。請參見[使用XML任務運行XPath查詢](http://agilebi.com/jwelch/2008/07/23/使用-xml-task-to-run-an-xpath-query /) – kjhughes

1

對於用來描述和約束數據的模式(以及我假設的以各種方式引導SSIS)以及您在某些時候想要編寫的可執行代碼,您並沒有很清楚地區分在特定時刻提取您想要的數據。有幾件事情你似乎想要或需要:

  • 要允許元素內的無約束的XML,你需要一個通配符;請閱讀xsd:any元素。
  • 要提取元素中的文本,您需要XPath string()函數(但請注意,您的示例"this is a new piece of content by <b>Person A</b>"不只是content的文本,但包含子元素)。
  • 要提取content元素的內容(這是你顯然想要什麼,而相比之下,你說你想要的),你會想序列化內容的序列化XML表示;有很多種方法可以做到這一點。
+0

如果我有一個 「這是一個新的內容Person A」 或 「這是一塊新的內容由''謝謝。 –

+0

我不知道你的意思是「因爲它們是」。它看起來好像您可能將XML元素看作字符串,可能包含或不包含標記; XSD將XML元素視爲樹中的節點,可能有也可能沒有子節點。你假設'這是某甲'和新內容時'這是由< B>某甲</B>一塊新的內容'在某種程度上一樣的嗎? –

+0

如果我在內遇到任何標籤我想包含它不會像當前發生的那樣過濾它。 –