J'ai trouvé une autre façon de le faire, voici échantillon:
créer db
boucle -X PUT http://localhost:5984/bookstore
créer un document de conception
boucle -X POST http://localhost:5984/bookstore/_bulk_docs -d @ design.doc
où le contenu de design.doc est:
{"docs":
[
{
"_id": "_design/app",
"updates": {
"xml2json": "
function (doc, req) {
if(req.query.doc == null) {
return [null, \"doc is null!\\n\"];
}
var xmlDoc = req.query.doc.replace(/^<\?xml\s+version\s*=\s*([\"'])[^\1]+\1[^?]*\?>/, \"\");
var html = new XML(xmlDoc);
if(doc==null) {
doc = {};
[email protected]();
if(doc._id==null||doc._id==\"\") {
[email protected]();
}
}
if (doc._id == null || doc._id == \"\") {
return [null, \"doc id is null!\\n\"];;
}
doc.title = html.BookList.BookData.Title.text();
doc.longtitle = html.BookList.BookData.TitleLong.text();
doc.authors = html.BookList.BookData.AuthorsText.text();
doc.publisher = html.BookList.BookData.PublisherText.text();
return [doc, \"ok!\\n\"];
}"
}
}
]
}
Test _update
doc=$(cat isbndb.sample); doc="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$doc")"; curl -X PUT http://localhost:5984/bookstore/_design/app/_update/xml2json/9781935182320?doc="$doc"
où le contenu de isbndb.sample est:
<?xml version="1.0" encoding="UTF-8"?>
<ISBNdb server_time="2010-08-11T04:13:08Z">
<BookList total_results="1" page_size="10" page_number="1" shown_results="1">
<BookData book_id="mastering_perl" isbn="0596527241" isbn13="9780596527242">
<Title>Mastering Perl</Title>
<TitleLong></TitleLong>
<AuthorsText>brian d foylt;/AuthorsText>
<PublisherText publisher_id="oreilly_media">Sebastopol, CA : O'Reilly Media, c2007.</PublisherText>
</BookData>
</BookList>
</ISBNdb>
je veux obtenir le json. donc l'attachement ne convient pas, peut-être que la meilleure façon est d'utiliser un champ de json pour transférer xml vers le serveur, mais il est peu pratique quand mon xml inclut autant de caractères "", ils doivent être échappés manuellement – turtledove
Il suffit de transformer votre code XML en une chaîne, dont il a déjà l'apparence, puis d'exécuter json_encode() .Il prendra soin de tous les fichiers d'échappement et de mise en forme pour vous.En outre, vous pouvez toujours traduire le XML en PHP objets (opération assez simple), puis exécutez-le via json_encode() et stockez-le dans votre document. –