2016-06-29 7 views
4

При запуске этого VB.net я получаю сообщение об ошибке «Данные на корневом уровне недействительны. Строка 1, позиция 1» при достижении строки 3 где он добавляет пространство имен RDF в Schemaset.Как создать корневой элемент RDF/XML для массовых проводок Craigslist в ASP.NET

Dim doc As New XmlDocument() 
Dim xss As New XmlSchemaSet() 
xss.Add("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") 
doc.Schemas = xss 
Dim rdf As XmlElement = doc.CreateElement("rdf:RDF") 
rdf.SetAttribute("xmlns", "http://purl.org/rss/1.0/") 
doc.AppendChild(rdf) 
Debug.WriteLine(doc.ToString) 

Я ищу способ, чтобы произвести пример кода для Craiglist насыпной проводки, но не имели никакой удачи в поиске .net примеров. Я готов использовать XML или RDF-библиотеку, но просто не могу найти хороших примеров того, как создать корневой элемент с двоеточием в нем. Я обнаружил, что вышеуказанный код может быть неудачным из-за ошибки .net, которая не разрешает cdata в схеме. Не уверен, что это правда.

https://www.craigslist.org/about/bulk_posting_interface

<?xml version="1.0"?> 

<rdf:RDF xmlns="http://purl.org/rss/1.0/" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:cl="http://www.craigslist.org/about/cl-bulk-ns/1.0"> 

<channel> 
<items> 
    <rdf:li rdf:resource="NYCBrokerHousingSample1"/> 
    <rdf:li rdf:resource="NYCBrokerHousingSample2"/> 
</items> 

<cl:auth username="[email protected]" 
     password="[email protected]" 
     accountID="14"/> 
</channel> 
... 

ответ

3

Это проще и удобнее, чтобы построить канал, используя XML XmlWriter функциональность (System.Xml пространства имен). Это пример для вас.

Dim xSet As New System.Xml.XmlWriterSettings() 
    xSet.Encoding = System.Text.ASCIIEncoding.UTF8 
    xSet.Indent = True 
    ''xSet.OmitXmlDeclaration = True ''if you wish 
    Dim sb As New StringBuilder() ''this will keep string. 
    Dim xw As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(sb, xSet) ''StreamBuilder is also possible 
    xw.WriteStartDocument() '' <?xml... 
    xw.WriteStartElement("rdf", "RDF", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") ''prefix, localName, NS 
    xw.WriteAttributeString("xmlns", "", "http://purl.org/rss/1.0/") ''default NS 
    xw.WriteAttributeString("xmlns", "cl", Nothing, "http://www.craigslist.org/about/cl-bulk-ns/1.0") ''extra NS 
    xw.WriteStartElement("channel") ''open <channel> 
    xw.WriteStartElement("items") 

    xw.WriteStartElement("rdf", "li", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") 
    xw.WriteAttributeString("rdf", "resource", Nothing, "NYCBrokerHousingSample1") 
    xw.WriteEndElement() ''li 

    xw.WriteStartElement("rdf", "li", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") 
    xw.WriteAttributeString("rdf", "resource", Nothing, "NYCBrokerHousingSample2") 
    xw.WriteEndElement() ''li 

    xw.WriteEndElement() ''items 

    xw.WriteStartElement("cl", "auth", Nothing) 
    xw.WriteAttributeString("username", "[email protected]") 
    xw.WriteAttributeString("password", "[email protected]") 
    xw.WriteAttributeString("accountID", "14") 
    xw.WriteEndElement() ''auth 

    xw.WriteEndElement() ''channel 
    xw.WriteEndElement() ''RDF 
    xw.WriteEndDocument() 
    xw.Flush() ''done 
    xw.Close() ''cleanup 
    Return sb.ToString() ''xml string 

И это вывод:

<?xml version="1.0" encoding="utf-16"?> 
<rdf:RDF xmlns="http://purl.org/rss/1.0/" 
     xmlns:cl="http://www.craigslist.org/about/cl-bulk-ns/1.0" 
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
    <channel> 
    <items> 
     <rdf:li rdf:resource="NYCBrokerHousingSample1" /> 
     <rdf:li rdf:resource="NYCBrokerHousingSample2" /> 
    </items> 
    <cl:auth username="[email protected]" password="[email protected]" accountID="14" /> 
    </channel> 
</rdf:RDF> 
+0

Вы рок. И мой первый раз использовал мою репутацию за щедрость. Я взволнован, что это сработало! – masteroleary