Я знаю, что это старый вопрос, но это общая проблема, и у меня есть решение, которое кажется более простым, чем предлагаемые до сих пор:
def stringify_children(node):
"""Given a LXML tag, return contents as a string
>>> html = "<p><strong>Sample sentence</strong> with tags.</p>"
>>> node = lxml.html.fragment_fromstring(html)
>>> extract_html_content(node)
"<strong>Sample sentence</strong> with tags."
"""
if node is None or (len(node) == 0 and not getattr(node, 'text', None)):
return ""
node.attrib.clear()
opening_tag = len(node.tag) + 2
closing_tag = -(len(node.tag) + 3)
return lxml.html.tostring(node)[opening_tag:closing_tag]
В отличие от некоторых других ответов на этот вопрос это решение сохраняет все теги, содержащиеся в нем, и атакует проблему под другим углом, чем другие рабочие решения.
Я получил это работает. Вот мой код ...
// Reads a 2-dim array of double.
// INPUT: fileId of open HDF5 file
public static bool read_double_array( H5FileId fileId, string dataset_name, int dim1, int dim2, ref double [,] output_double_array )
{
try
{
output_double_array = new double[ dim1, dim2 ];
H5Array<double> h5_array = new H5Array<double>( output_double_array );
H5DataSetId dataset = H5D.open( fileId, dataset_name);
H5D.read<double>( dataset,
new H5DataTypeId(H5T.H5Type.NATIVE_DOUBLE),
h5_array);
}
catch( HDFException e )
{
Console.WriteLine( e.Message );
return false;
}
return true;
}
Избавьтесь от серьезной боли (из-за подробностей реализации низкого уровня HDF5) и посмотрите HDFql .
Здесь приводится решение с использованием HDFql в C # для чтения многомерного (размер 3x3) набора данных с именем dset
типа данных double, хранящегося в файле HDF5 с именем test.h5
(предположим, что и файл, и набор данных уже существуют) :
// use HDFql namespace (make sure it can be found by the C# compiler)
using AS.HDFql;
public class Test
{
public static void Main(string []args)
{
// declare variables
double [,]data = new double[3, 3];
int x;
int y;
// use (i.e. open) HDF file "test.h5"
HDFql.Execute("USE FILE test.h5");
// register variable "data" for subsequent use (by HDFql)
HDFql.VariableRegister(data);
// select (i.e. read) dataset "dset" into variable "data"
HDFql.Execute("SELECT FROM dset INTO MEMORY " + HDFql.VariableGetNumber(data));
// unregister variable "data" as it is no longer used/needed (by HDFql)
HDFql.VariableUnregister(data);
// display content of variable "data"
for(x = 0; x < 3; x++)
{
for(y = 0; y < 3; y++)
{
System.Console.WriteLine(data[x, y]);
}
}
}
}