创建XSD忽略标签

问题描述:

内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.

认为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

非常感谢。我按照你的建议尝试了。 '' ''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

对于用来描述和约束数据的模式(以及我假设的以各种方式引导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

如果我在内遇到任何标签我想包含它不会像当前发生的那样过滤它。 –