我想将一些文档属性(以xml格式)作为节点使用,以便我可以使用子元素。到目前为止,我有:
var counts = [];
for (var p of xdmp.documentProperties(uris)) {
var isANode = p instanceof Node; // false (actually true - see edit)
var count = xdmp.xqueryEval('fn:count(' + p + '//data)')
counts.push(count)
}
counts
我在MarkLogic文档中看过nodebuilder个示例,我想使用该界面。例如
myNode.xpath('//data')
var children = myNode.childNodes()
有没有一种方法可以将对象转换为节点,而不是使用XPath进行评估?或者,有没有更好的方法来使用Server Side JavaScript中的现有XML?
在XQuery中,我可以使用xdmp:tranform-to-json()
,但SJS中没有提供该功能。
编辑:
在我尝试提供干净的代码示例时,我遗漏了重要信息。我的代码结构如下:
for (var uri of cts.uriMatch('/pattern/*')) {
var p = xdmp.documentProperties(uri);
var isANode = p instanceof Node; // false
// ...
}
而不是
for (var p of xdmp.documentProperties(cts.uriMatch('/pattern/*'))) {
var isANode = p instanceof Node; // true
// ...
}
返回的类型是ValueIterator
,相当于XQuery序列,可以使用以下方法访问:
xdmp.documentProperties(uri).next().value
答案 0 :(得分:7)
这在QConsole中对我有用:
using (SqlConnection sqlCon = new SqlConnection(sqlCnt))
{
for (int i = 1; i < metroGrid2.Rows.Count; i++)
{
SqlCommand cmd = new SqlCommand("INSERT INTO Yeucaukhachang(id,MaKhachHang,MaHang,TenHang,DonViTinh,Dongia,SoLuong,Duyet)
values(@id,@MaKhachHang,@MaHang,@TenHang,@DonViTinh,@Dongia,@SoLuong,@Duyet)", sqlCon);
cmd.Parameters.AddWithValue("@id", metroGrid2.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@MaKhachHang", makh.Text);
cmd.Parameters.AddWithValue("@MaHang", metroGrid2.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@TenHang", metroGrid2.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@SoLuong", metroGrid2.Rows[i].Cells[4].Value);
cmd.Parameters.AddWithValue("@DonViTinh", metroGrid2.Rows[i].Cells[5].Value);
cmd.Parameters.AddWithValue("@Dongia", metroGrid2.Rows[i].Cells[6].Value);
cmd.Parameters.AddWithValue("@Duyet", 'N');
sqlCon.Open();
cmd.ExecuteNonQuery();
sqlCon.Close();
MessageBox.Show("Thêm thành công, chuyển qua xác nhận yêu cầu");
}
}
在我的测试中,每个p都是一个节点。我用xquery脚本创建了一些示例数据。
'